diff -r 000000000000 -r 044383f39525 imgtools/buildrom/tools/featurefile.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/buildrom/tools/featurefile.pm Tue Oct 27 16:36:35 2009 +0000 @@ -0,0 +1,187 @@ +# +# Copyright (c) 2007-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: +# + +# This package contains common routines required for the creation of feature registry configuration/ +# features data file. +package featurefile; + +# Include Module package +use FileHandle; +use WRITER; + +use strict; + +# Class constructor +sub new +{ + my ($class,$xmlDBHandle) = @_; + + my $object = {}; + $object->{_FEATUREFILENAME} = undef; + $object->{_FILEHANDLE} = undef; + $object->{_FILEVERSION} = undef; + $object->{_FEATCOUNT} = 0; + $object->{_DEFAULTRANGECOUNT} = 0; + $object->{_XMLDBHANDLE} = $xmlDBHandle; + + bless($object, $class); + return $object; +} + +# Subroutine to create feature registry configuration/features data file +# @param $object - Object reference which is passed implicitly +# @param _FEATUREFILENAME - Feature registry configuration/features data filename +# @param _FEATURELIST - The complete List of features which are either to be included or excluded +sub createFile +{ + my $object = shift; + $object->{_FEATUREFILENAME} = shift; + $object->{_FEATURELIST} = shift; + + # Open feature file for writing + if (!$object->openFile()) + { + return 0; + } + + # Create feauture map + $object->createFeatureMap(); + + # Set feature count + $object->setFeatureCount(); + + # Set Default Range Count + $object->setDefaultRangeCount(); + + # Write feature file header + $object->writeHeader(); + + # Create feature entry for the listed features + $object->writeFeatures(); + + # Write Default Supported Range + $object->writeDefault(); + + # Close feature file. + $object->closeFile(); + + return 1; +} + +# Subroutine to open feature file +# @param $object - Object reference which is passed implicitly +sub openFile +{ + my $object = shift; + + open (CONFIG_FH, ">$object->{_FEATUREFILENAME}"); + binmode(CONFIG_FH); + $object->{_FILEHANDLE} = *CONFIG_FH; + + if(!defined $object->{_FILEHANDLE}) + { + print "\nError in creating the $object->{_FEATUREFILENAME}, check for the accessability of File / Drive\n"; + return 0; + } + return 1; +} + +# Subroutine to write feature file header +# @param $object - Object reference which is passed implicitly +sub writeHeader +{ + my $object = shift; + + $object->write2File(0x74616566); + $object->write2File($object->{_FILEVERSION}); + $object->write2File($object->{_FEATCOUNT}); + $object->write2File($object->{_DEFAULTRANGECOUNT}); +} + +# Subroutine to check if the feature is present in feature databse XML file +# @param $object - Object reference which is passed implicitly +sub isPresentInFeatureListXML +{ + my $object = shift; + my $fidMain= shift; + + # If the feature is not found, generate an error message. + if(!defined $fidMain->{uid}) + { + print "Error:Feature $fidMain->{name} not found in feature list XML \n"; + return 0; + } + return 1; +} + +# Subroutine to set the count of listed features in feature file +# @param $object - Object reference which is passed implicitly +sub setFeatureCount +{ + my $object = shift; + + $object->{_FEATCOUNT} = scalar (keys %{$object->{_FEATUREHASHMAP}}); +} + +# Subroutine to set the count of Default Support Range(D.S.R) +# @param $object - Object reference which is passed implicitly +sub setDefaultRangeCount +{ + my $object = shift; + + $object->{_DEFAULTRANGECOUNT} = ($object->{_XMLDBHANDLE})->defaultIncludeCount(); +} + +# Write the default=present featureUID ranges (min/lowerruid,max/higheruid) to the feature file +# @param $object - Object reference which is passed implicitly +sub writeDefault +{ + my $object = shift; + + if ($object->{_DEFAULTRANGECOUNT}) + { + my @defaultFeatures = ($object->{_XMLDBHANDLE})->getDefaultIncludeInfo(); + for my $i ( 0 .. $#defaultFeatures ) + { + my $minuid = $defaultFeatures[$i][0]; + my $maxuid = $defaultFeatures[$i][1]; + $object->write2File($minuid); + $object->write2File($maxuid); + } + } +} + +# Subroutine to close feature file. +# @param $object - Object reference which is passed implicitly +sub closeFile +{ + my $object = shift; + + close $object->{_FILEHANDLE}; +} + +# Subroutine to write the bytes to the binary file. +# @param $object - Object reference which is passed implicitly +# @param $bytes - 32-bit value which is to be writen in binary file. +sub write2File +{ + my $object = shift; + my $bytes = shift; + + &WRITER::write32($object->{_FILEHANDLE}, $bytes); +} + +1; \ No newline at end of file