--- /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