Checking S60 platform version during installation or at run time
Description
All S60 application SIS packages contain a mandatory dependency to ’Series60ProductID’ component. This dependency defines the minimum S60 platform version required in order to run the application, and prevents installation on older platforms. See the document "S60 Platform: Identification Codes" available at http://www.forum.nokia.com/info/sw.nokia.com/id/98ac8551-0134-467d-80f3-1c0a3010bf58/S60_Platform_Identification_Codes_v1_4_en.pdf.html for more information about the use of Series60ProductID.
The Series60ProductID can be checked only during installation, and only for aborting the installation or warning about possible incompatibility. However, in some cases it would be useful to have a single SIS package that would select the installed files based on the S60 platform version. The following solution describes how to do this in a .pkg file. Similarly, a code snippet for checking the platform version at run time is provided.
Solution
Platform version in pkg condition blocksEven though there is no dedicated attribute for the S60 platform version that could be used with IF condition blocks, it is still possible to resolve the version, based on the existence of specific files on the ROM drive.
Each Series60ProductID component is stored in a separate .sis file in z:/system/install/ directory. These files are named as follows:
z:/system/install/Series60v3.0.sis | S60 3rd Edition
z:/system/install/Series60v2.8.sis | S60 2nd Edition, Feature Pack 3
z:/system/install/Series60v2.6.sis | S60 2nd Edition, Feature Pack 2
z:/system/install/Series60v2.1.sis | S60 2nd Edition, Feature Pack 1
z:/system/install/Series60v2.0.sis | S60 2nd Edition
z:/system/install/Series60v1.2.sis | S60 1st Edition (1.2)
z:/system/install/Series60v1.1.sis | (n/a)
z:/system/install/Series60v1.0.sis | (n/a)
z:/system/install/Series60v0.9.sis | S60 v0.9
In each device, there is a corresponding file for the platform version it represents, and also files for all previous versions that are supported. For example, the Nokia N70 (2nd Edition, FP3) contains all above files except Series60v3.0.sis, and the Nokia E70 (3rd Edition) only has Series60v3.0.sis.
These filenames can be utilized in pkg files:
;---------------------------------------
#{"MyApplication"},(0x10000001),1,0,0
; Lowest supported S60 platform version is 2nd Edition
(0x101F7960), 0, 0, 0, {" Series60ProductID"}
; install common files for all supported platforms
; ...
IF EXISTS("z:/system/install/Series60v2.8.sis")
; install 2nd Ed, FP3-specific files
ELSEIF EXISTS("z:/system/install/Series60v2.6.sis")
; install 2nd Ed, FP2-specific files
ELSEIF EXISTS("z:/system/install/Series60v2.1.sis")
; install 2nd Ed, FP1-specific files
ELSE
; 2nd Edition-specific files
ENDIF
;---------------------------------------
Checking the platform version at run time
The following function can be used to recover the S60 platform version at run time. On return, aMajor and aMinor contain the highest version number found from above file names. Note that while aMajor refers to the S60 Edition, aMinor cannot always be directly interpreted as a Feature Pack number (for example, 2.6 == 2nd Edition, FP2).
//------------------------------------------------------------------------------
#include <f32file.h> // link against efsrv.lib
_LIT(KS60ProductIDFile, "Series60v*.sis");
_LIT(KROMInstallDir, "z://system//install//");
void GetS60PlatformVersionL( RFs& aFs, TUint& aMajor, TUint& aMinor )
{
TFindFile ff( aFs );
CDir* result;
User::LeaveIfError( ff.FindWildByDir( KS60ProductIDFile, KROMInstallDir, result ) );
CleanupStack::PushL( result );
User::LeaveIfError( result->Sort( ESortByName|EDescending ) );
aMajor = (*result)[0].iName[9] - ’0’;
aMinor = (*result)[0].iName[11] - ’0’;
CleanupStack::PopAndDestroy(); // result
}
//------------------------------------------------------------------------------