import java.io.IOException;\r
import java.math.BigInteger;\r
import java.util.ArrayList;\r
+import java.util.Collections;\r
import java.util.Comparator;\r
import java.util.HashMap;\r
+import java.util.Iterator;\r
import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
import java.util.UUID;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
\r
import org.apache.xmlbeans.XmlException;\r
import org.apache.xmlbeans.XmlObject;\r
+import org.tianocore.DynamicPcdBuildDefinitionsDocument;\r
import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions;\r
+import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData;\r
+import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo;\r
import org.tianocore.FrameworkModulesDocument;\r
-import org.tianocore.FrameworkPlatformDescriptionDocument;\r
+import org.tianocore.PcdDeclarationsDocument;\r
+import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.PcdBuildDefinitionDocument;\r
+import org.tianocore.PlatformSurfaceAreaDocument.PlatformSurfaceArea;\r
import org.tianocore.ModuleSADocument;\r
+import org.tianocore.ModuleSADocument.ModuleSA;\r
+import org.tianocore.PackageSurfaceAreaDocument;\r
import org.tianocore.PcdBuildDefinitionDocument.PcdBuildDefinition;\r
+import org.tianocore.build.autogen.CommonDefinition;\r
import org.tianocore.build.global.GlobalData;\r
import org.tianocore.build.global.SurfaceAreaQuery;\r
+import org.tianocore.build.id.FpdModuleIdentification;\r
import org.tianocore.build.pcd.action.ActionMessage;\r
import org.tianocore.build.pcd.entity.DynamicTokenValue;\r
import org.tianocore.build.pcd.entity.MemoryDatabaseManager;\r
import org.tianocore.build.pcd.entity.Token;\r
import org.tianocore.build.pcd.entity.UsageInstance;\r
import org.tianocore.build.pcd.exception.EntityException;\r
+import org.tianocore.logger.EdkLog;\r
import org.tianocore.ModuleTypeDef;\r
\r
class CStructTypeDeclaration {\r
// If we have a empty StringTable\r
//\r
if (al.size() == 0) {\r
- cDeclCode += tab + String.format("UINT16 %s[1]; /* StringTable is Empty */", stringTable) + newLine; \r
+ cDeclCode += String.format("%-20s%s[1]; /* StringTable is empty */", "UINT16", stringTable) + newLine; \r
decl = new CStructTypeDeclaration (\r
stringTable,\r
2,\r
); \r
declaList.add(decl);\r
\r
- cInstCode = " { 0 } " + String.format("/* %s */", stringTable);\r
+ cInstCode = String.format("/* %s */", stringTable) + newLine + tab + "{ 0 }";\r
instTable.put(stringTable, cInstCode);\r
} else {\r
\r
stringTableName = String.format("%s_%d", stringTable, i);\r
cDeclCode += tab;\r
}\r
- cDeclCode += String.format("UINT16 %s[%d]; /* %s */", stringTableName, str.length() + 1, alComments.get(i)) + newLine;\r
+ cDeclCode += String.format("%-20s%s[%d]; /* %s */", "UINT16", stringTableName, str.length() + 1, alComments.get(i)) + newLine;\r
\r
if (i == 0) {\r
cInstCode = "/* StringTable */" + newLine;\r
Output.add("/* SizeTable */");\r
Output.add("{");\r
if (al.size() == 0) {\r
- Output.add("0");\r
+ Output.add("\t0");\r
} else {\r
for (int index = 0; index < al.size(); index++) {\r
Integer n = al.get(index);\r
\r
guidStrArray =(uuid.toString()).split("-");\r
\r
- return String.format("{ 0x%s, 0x%s, 0x%s, { 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s } }",\r
+ return String.format("{0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s}}",\r
guidStrArray[0],\r
guidStrArray[1],\r
guidStrArray[2],\r
\r
Output.add("/* GuidTable */");\r
Output.add("{");\r
+\r
if (al.size() == 0) {\r
- Output.add(getUuidCString(new UUID(0, 0)));\r
+ Output.add("\t" + getUuidCString(new UUID(0, 0)));\r
}\r
\r
for (int i = 0; i < al.size(); i++) {\r
decl = new CStructTypeDeclaration (\r
"SystemSkuId",\r
1,\r
- "SKU_ID SystemSkuId;\r\n",\r
+ String.format("%-20sSystemSkuId;\r\n", "SKU_ID"),\r
true\r
);\r
declaList.add(decl);\r
output.add("{");\r
\r
if (al.size() == 0) {\r
- output.add("0");\r
+ output.add("\t0");\r
}\r
\r
for (int index = 0; index < al.size(); index++) {\r
private final String newLine = "\r\n";\r
private final String commaNewLine = ",\r\n";\r
private final String tab = "\t";\r
- public final static String ExMapTableDeclaration = "DYNAMICEX_MAPPING ExMapTable[%s_EXMAPPING_TABLE_SIZE];\r\n";\r
- public final static String GuidTableDeclaration = "EFI_GUID GuidTable[%s_GUID_TABLE_SIZE];\r\n";\r
- public final static String LocalTokenNumberTableDeclaration = "UINT32 LocalTokenNumberTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
- public final static String StringTableDeclaration = "UINT16 StringTable[%s_STRING_TABLE_SIZE];\r\n";\r
- public final static String SizeTableDeclaration = "UINT16 SizeTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
- public final static String SkuIdTableDeclaration = "UINT8 SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
+ public final static String ExMapTableDeclaration = "DYNAMICEX_MAPPING ExMapTable[%s_EXMAPPING_TABLE_SIZE];\r\n";\r
+ public final static String GuidTableDeclaration = "EFI_GUID GuidTable[%s_GUID_TABLE_SIZE];\r\n";\r
+ public final static String LocalTokenNumberTableDeclaration = "UINT32 LocalTokenNumberTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
+ public final static String StringTableDeclaration = "UINT16 StringTable[%s_STRING_TABLE_SIZE];\r\n";\r
+ public final static String SizeTableDeclaration = "UINT16 SizeTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
+ public final static String SkuIdTableDeclaration = "UINT8 SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
\r
\r
public final static String ExMapTableSizeMacro = "#define %s_EXMAPPING_TABLE_SIZE %d\r\n";\r
}\r
}\r
\r
+ private int getHiiPtrTypeAlignmentSize(Token token) {\r
+ switch (token.datumType) {\r
+ case UINT8:\r
+ return 1;\r
+ case UINT16:\r
+ return 2;\r
+ case UINT32:\r
+ return 4;\r
+ case UINT64:\r
+ return 8;\r
+ case POINTER:\r
+ if (token.isHiiEnable()) {\r
+ if (token.isHiiDefaultValueUnicodeStringType()) {\r
+ return 2;\r
+ }\r
+ }\r
+ return 1;\r
+ case BOOLEAN:\r
+ return 1;\r
+ default:\r
+ return 1;\r
+ }\r
+ }\r
+ \r
private int getAlignmentSize (Token token) {\r
if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
return 2;\r
// Add a mapping if this dynamic PCD entry is a EX type\r
//\r
if (t.isDynamicEx()) {\r
- exMapTable.add(t.tokenNumber, \r
+ exMapTable.add((int)t.tokenNumber, \r
t.dynamicExTokenNumber, \r
guidTable.add(t.tokenSpaceName, t.getPrimaryKeyString()), \r
t.getPrimaryKeyString()\r
//\r
// We made a assumption that both PEI_PCD_DATABASE and DXE_PCD_DATABASE\r
// has a least one data memember with alignment size of 1. So we can\r
- // remove the last "," in the C structure instantiation string.\r
+ // remove the last "," in the C structure instantiation string. Luckily,\r
+ // this is true as both data structure has SKUID_TABLE anyway.\r
//\r
if ((align == 1) && (i == declaListBasedOnAlignment.size() - 1)) {\r
initInstStr += newLine;\r
}\r
\r
if (uinitDatabaseEmpty) {\r
- uninitDeclStr += tab + " UINT8 dummy; /* PCD_DATABASE_UNINIT is emptry */\r\n";\r
+ uninitDeclStr += tab + String.format("%-20sdummy; /* PCD_DATABASE_UNINIT is emptry */\r\n", "UINT8");\r
}\r
\r
initDeclStr += String.format("} %s_PCD_DATABASE_INIT;", phase) + newLine + newLine;\r
}\r
\r
private String getSkuEnabledTypeDeclaration (Token token) {\r
- return String.format("SKU_HEAD %s;\r\n", token.getPrimaryKeyString());\r
+ return String.format("%-20s%s;\r\n", "SKU_HEAD", token.getPrimaryKeyString());\r
}\r
\r
private String getSkuEnabledTypeInstantiaion (Token token, int SkuTableIdx) {\r
privateGlobalName = t.getPrimaryKeyString();\r
}\r
\r
- if (t.isUnicodeStringType()) {\r
- privateGlobalCCode = String.format("STRING_HEAD %s[%d];\r\n", t.getPrimaryKeyString(), t.getSkuIdCount());\r
- } else {\r
- String type = getCType(t);\r
- if (t.datumType == Token.DATUM_TYPE.POINTER) {\r
- privateGlobalCCode = String.format("%s %s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), t.datumSize);\r
+ String type = getCType(t);\r
+ if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable())) {\r
+ int bufferSize;\r
+ if (t.isASCIIStringType()) {\r
+ //\r
+ // Build tool will add a NULL string at the end of the ASCII string\r
+ //\r
+ bufferSize = t.datumSize + 1;\r
} else {\r
- privateGlobalCCode = String.format("%s %s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
+ bufferSize = t.datumSize;\r
}\r
+ privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\r
+ } else {\r
+ privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
}\r
}\r
\r
- private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) {\r
+ private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) \r
+ throws EntityException {\r
\r
- String typeStr = "";\r
+ String typeStr;\r
\r
if (token.datumType == Token.DATUM_TYPE.UINT8) {\r
typeStr = "UINT8";\r
} else if (token.datumType == Token.DATUM_TYPE.BOOLEAN) {\r
typeStr = "BOOLEAN";\r
} else if (token.datumType == Token.DATUM_TYPE.POINTER) {\r
- return String.format("UINT8 %s[%d]", cName, token.datumSize);\r
+ int size;\r
+ if (token.isHiiDefaultValueUnicodeStringType()) {\r
+ typeStr = "UINT16";\r
+ //\r
+ // Include the NULL charactor\r
+ //\r
+ size = token.datumSize / 2 + 1;\r
+ } else {\r
+ typeStr = "UINT8";\r
+ if (token.isHiiDefaultValueASCIIStringType()) {\r
+ //\r
+ // Include the NULL charactor\r
+ //\r
+ size = token.datumSize + 1;\r
+ } else {\r
+ size = token.datumSize;\r
+ }\r
+ }\r
+ return String.format("%-20s%s[%d];\r\n", typeStr, cName, size);\r
} else {\r
+ throw new EntityException("Unknown DATUM_TYPE type in when generating code for VARIABLE_ENABLED PCD entry");\r
}\r
\r
- return String.format("%s %s;\r\n", typeStr, cName);\r
+ return String.format("%-20s%s;\r\n", typeStr, cName);\r
}\r
\r
private String getDataTypeDeclaration (Token token) {\r
s += tab + "{" + newLine;\r
\r
for (i = 0; i < t.skuData.size(); i++) {\r
- if (t.isUnicodeStringType() && !t.isHiiEnable()) {\r
+ if (t.isUnicodeStringType()) {\r
s += tab + tab + String.format("{ %d }", stringTable.add(t.skuData.get(i).value.value, t));\r
} else if (t.isHiiEnable()) {\r
/* VPD_HEAD definition\r
UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID.\r
UINT16 StringIndex; // Offset in String Table in units of UINT16.\r
UINT16 Offset; // Offset in Variable\r
+ UINT16 DefaultValueOffset; // Offset of the Default Value\r
} VARIABLE_HEAD ;\r
*/\r
String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i); \r
// the instantiation for the default value.\r
//\r
CStructTypeDeclaration decl = new CStructTypeDeclaration (variableDefaultName,\r
- getDataTypeAlignmentSize(t),\r
+ getHiiPtrTypeAlignmentSize(t),\r
getDataTypeDeclarationForVariableDefault_new(t, variableDefaultName, i),\r
true\r
); \r
}\r
\r
class ModuleInfo {\r
- public ModuleSADocument.ModuleSA module;\r
- public ModuleTypeDef.Enum type;\r
+ private String type;\r
+ private FpdModuleIdentification moduleId;\r
+ private PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef;\r
+ \r
+ \r
\r
- public ModuleInfo (ModuleSADocument.ModuleSA module, ModuleTypeDef.Enum type) {\r
- this.module = module;\r
+ public ModuleInfo (FpdModuleIdentification moduleId, String type, XmlObject pcdDef) {\r
+ this.moduleId = moduleId;\r
this.type = type;\r
+ this.pcdBuildDef = ((PcdBuildDefinitionDocument)pcdDef).getPcdBuildDefinition();\r
+ }\r
+ public String getModuleType (){\r
+ return this.type;\r
+ }\r
+ public FpdModuleIdentification getModuleId (){\r
+ return this.moduleId;\r
+ }\r
+ public PcdBuildDefinitionDocument.PcdBuildDefinition getPcdBuildDef(){\r
+ return this.pcdBuildDef;\r
}\r
}\r
\r
private int originalMessageLevel;\r
\r
/// Cache the fpd docment instance for private usage.\r
- private FrameworkPlatformDescriptionDocument fpdDocInstance;\r
-\r
+ private PlatformSurfaceAreaDocument fpdDocInstance;\r
+ \r
+ /// xmlObject name\r
+ private static String xmlObjectName = "PcdBuildDefinition"; \r
+ \r
/**\r
Set WorkspacePath parameter for this action class.\r
\r
@throws EntityException Exception indicate failed to execute this action.\r
\r
**/\r
- private void execute() throws EntityException {\r
+ public void execute() throws EntityException {\r
//\r
// Get memoryDatabaseManager instance from GlobalData.\r
// The memoryDatabaseManager should be initialized for whatever build\r
List<ModuleInfo> allModules = new ArrayList<ModuleInfo>();\r
ModuleInfo current = null;\r
int index = 0;\r
- org.tianocore.Components components = null;\r
FrameworkModulesDocument.FrameworkModules fModules = null;\r
ModuleSADocument.ModuleSA[] modules = null;\r
HashMap<String, XmlObject> map = new HashMap<String, XmlObject>();\r
\r
if (fpdDocInstance == null) {\r
try {\r
- fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
+ fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
} catch(IOException ioE) {\r
throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());\r
} catch(XmlException xmlE) {\r
\r
}\r
\r
- map.put("FrameworkPlatformDescription", fpdDocInstance);\r
- SurfaceAreaQuery.setDoc(map); \r
- modules = SurfaceAreaQuery.getFpdModuleSAs();\r
- for (index = 0; index < modules.length; index ++) {\r
- SurfaceAreaQuery.setDoc(GlobalData.getDoc(modules[index].getModuleName()));\r
- allModules.add(new ModuleInfo(modules[index], \r
- ModuleTypeDef.Enum.forString(SurfaceAreaQuery.getModuleType())));\r
+ Map<FpdModuleIdentification,XmlObject>pcdBuildDef = GlobalData.getFpdModuleSaXmlObject(CollectPCDAction.xmlObjectName);\r
+ Set<FpdModuleIdentification> pcdBuildKeySet = pcdBuildDef.keySet();\r
+ Iterator item = pcdBuildKeySet.iterator();\r
+ while (item.hasNext()){\r
+ FpdModuleIdentification id = (FpdModuleIdentification)item.next();\r
+ allModules.add(new ModuleInfo(id, id.getModule().getModuleType(),pcdBuildDef.get(id))); \r
}\r
\r
return allModules;\r
boolean isDuplicate = false;\r
Token.PCD_TYPE pcdType = Token.PCD_TYPE.UNKNOWN;\r
Token.DATUM_TYPE datumType = Token.DATUM_TYPE.UNKNOWN;\r
- int tokenNumber = 0;\r
+ long tokenNumber = 0;\r
String moduleName = null;\r
String datum = null;\r
int maxDatumSize = 0;\r
+ String[] tokenSpaceStrRet = null;\r
\r
//\r
// ----------------------------------------------\r
// BUGBUG: For transition schema, we can *not* get module's version from \r
// <ModuleSAs>, It is work around code.\r
// \r
- primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).module.getModuleName(), \r
+ primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).getModuleId().getModule().getName(), \r
+ null,\r
null,\r
null, \r
- null, \r
- modules.get(index).module.getArch().toString(),\r
+ modules.get(index).getModuleId().getArch(),\r
null);\r
- primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).module.getModuleName(), \r
+ primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).getModuleId().getModule().getName(), \r
null, \r
null, \r
null, \r
- modules.get(index2).module.getArch().toString(), \r
+ modules.get(index2).getModuleId().getArch(), \r
null);\r
if (primaryKey1.equalsIgnoreCase(primaryKey2)) {\r
isDuplicate = true;\r
//\r
// It is legal for a module does not contains ANY pcd build definitions.\r
// \r
- if (modules.get(index).module.getPcdBuildDefinition() == null) {\r
+ if (modules.get(index).getPcdBuildDef() == null) {\r
continue;\r
}\r
\r
- pcdBuildDataArray = modules.get(index).module.getPcdBuildDefinition().getPcdDataList();\r
+ pcdBuildDataArray = modules.get(index).getPcdBuildDef().getPcdDataList();\r
\r
- moduleName = modules.get(index).module.getModuleName();\r
+ moduleName = modules.get(index).getModuleId().getModule().getName();\r
\r
//\r
// ----------------------------------------------------------------------\r
// \r
for (pcdIndex = 0; pcdIndex < pcdBuildDataArray.size(); pcdIndex ++) {\r
pcdBuildData = pcdBuildDataArray.get(pcdIndex);\r
+ \r
+ try {\r
+ tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+ } catch ( Exception e ) {\r
+ throw new EntityException ("Faile get Guid for token " + pcdBuildData.getCName() + ":" + e.getMessage());\r
+ }\r
+\r
+ if (tokenSpaceStrRet == null) {\r
+ throw new EntityException ("Fail to get Token space guid for token" + pcdBuildData.getCName());\r
+ } \r
+\r
primaryKey = Token.getPrimaryKeyString(pcdBuildData.getCName(),\r
- translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
pcdType = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());\r
datumType = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());\r
- tokenNumber = Integer.decode(pcdBuildData.getToken().toString());\r
+ tokenNumber = Long.decode(pcdBuildData.getToken().toString());\r
if (pcdBuildData.getValue() != null) {\r
datum = pcdBuildData.getValue().toString();\r
} else {\r
throw new EntityException(exceptionString);\r
}\r
\r
- //\r
- // Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools\r
- // will check that, following checking code could be removed.\r
- // \r
- if (pcdBuildData.getTokenSpaceGuid() == null) {\r
- exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in module %s! This is required!",\r
- pcdBuildData.getCName(),\r
- moduleName);\r
- throw new EntityException(exceptionString);\r
- }\r
-\r
//\r
// -------------------------------------------------------------------------------------------\r
// 2.1.1), Do some necessary checking work for FixedAtBuild, FeatureFlag and PatchableInModule\r
// If the token is not in database, create a new token instance and add\r
// a usage instance into this token in database.\r
// \r
+ try {\r
+ tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+ } catch (Exception e) {\r
+ throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+ }\r
+\r
+ if (tokenSpaceStrRet == null) {\r
+ throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+ }\r
+\r
token = new Token(pcdBuildData.getCName(), \r
- translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
\r
token.datumType = datumType;\r
token.tokenNumber = tokenNumber;\r
null,\r
null,\r
null,\r
- modules.get(index).type, \r
+ CommonDefinition.getModuleType(modules.get(index).getModuleType()), \r
pcdType,\r
- modules.get(index).module.getArch().toString(), \r
+ modules.get(index).getModuleId().getArch(), \r
null,\r
datum,\r
maxDatumSize);\r
String dynamicPrimaryKey = null;\r
DynamicPcdBuildDefinitions dynamicPcdBuildDefinitions = null;\r
List<DynamicPcdBuildDefinitions.PcdBuildData> dynamicPcdBuildDataArray = null;\r
+ String[] tokenSpaceStrRet = null;\r
\r
//\r
// If FPD document is not be opened, open and initialize it.\r
// \r
if (fpdDocInstance == null) {\r
try {\r
- fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
+ fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
} catch(IOException ioE) {\r
throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());\r
} catch(XmlException xmlE) {\r
throw new EntityException("Can't parse the FPD xml fle:" + fpdFilePath + "\n" + xmlE.getMessage());\r
}\r
}\r
-\r
- dynamicPcdBuildDefinitions = fpdDocInstance.getFrameworkPlatformDescription().getDynamicPcdBuildDefinitions();\r
+ \r
+ dynamicPcdBuildDefinitions = fpdDocInstance.getPlatformSurfaceArea().getDynamicPcdBuildDefinitions();\r
if (dynamicPcdBuildDefinitions == null) {\r
exceptionString = String.format("[FPD file error] There are no <PcdDynamicBuildDescriptions> in FPD file but contains Dynamic type "+\r
"PCD entry %s in module %s!",\r
\r
dynamicPcdBuildDataArray = dynamicPcdBuildDefinitions.getPcdBuildDataList();\r
for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) {\r
- //\r
- // Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools\r
- // will check that, following checking code could be removed.\r
- // \r
- if (dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid() == null) {\r
- exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in <DynamicPcdBuildDefinitions>! This is required!",\r
- dynamicPcdBuildDataArray.get(index).getCName());\r
- throw new EntityException(exceptionString);\r
+ //String tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName())[1];\r
+ String tokenSpaceGuidString = null;\r
+ try {\r
+ tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName());\r
+ } catch (Exception e) {\r
+ throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
+ }\r
+ \r
+ if (tokenSpaceStrRet == null) {\r
+ throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
}\r
\r
dynamicPrimaryKey = Token.getPrimaryKeyString(dynamicPcdBuildDataArray.get(index).getCName(),\r
- translateSchemaStringToUUID(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid()));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
if (dynamicPrimaryKey.equalsIgnoreCase(token.getPrimaryKeyString())) {\r
return dynamicPcdBuildDataArray.get(index);\r
}\r
String temp;\r
boolean hasSkuId0 = false;\r
Token.PCD_TYPE pcdType = Token.PCD_TYPE.UNKNOWN;\r
- int tokenNumber = 0;\r
+ long tokenNumber = 0;\r
String hiiDefaultValue = null;\r
String[] variableGuidString = null;\r
\r
dynamicInfo.getMaxDatumSize());\r
throw new EntityException(exceptionString);\r
}\r
- tokenNumber = Integer.decode(dynamicInfo.getToken().toString());\r
+ tokenNumber = Long.decode(dynamicInfo.getToken().toString());\r
if (tokenNumber != token.tokenNumber) {\r
exceptionString = String.format("[FPD file error] For dynamic PCD %s, the token number in module %s is 0x%x, but"+\r
"in <DynamicPcdBuildDefinictions>, the token number is 0x%x, they are not match!",\r
//\r
// Get variable guid string according to the name of guid which will be mapped into a GUID in SPD file.\r
// \r
- variableGuidString = GlobalData.getGuidInfoGuid(skuInfoList.get(index).getVariableGuid().toString());\r
+ variableGuidString = GlobalData.getGuidInfoFromCname(skuInfoList.get(index).getVariableGuid().toString());\r
if (variableGuidString == null) {\r
throw new EntityException(String.format("[GUID Error] For dynamic PCD %s, the variable guid %s can be found in all SPD file!",\r
token.cName, \r
skuInfoList.get(index).getVariableGuid().toString()));\r
}\r
-\r
- skuInstance.value.setHiiData(skuInfoList.get(index).getVariableName(),\r
+ String variableStr = skuInfoList.get(index).getVariableName();\r
+ Pattern pattern = Pattern.compile("0x([a-fA-F0-9]){4}");\r
+ Matcher matcher = pattern.matcher(variableStr);\r
+ List<String> varNameList = new ArrayList<String>();\r
+ while (matcher.find()){\r
+ String str = variableStr.substring(matcher.start(),matcher.end());\r
+ varNameList.add(str);\r
+ }\r
+ \r
+ skuInstance.value.setHiiData(varNameList,\r
translateSchemaStringToUUID(variableGuidString[1]),\r
skuInfoList.get(index).getVariableOffset(),\r
skuInfoList.get(index).getHiiDefaultValue().toString());\r
ca.setWorkspacePath("m:/tianocore/edk2");\r
ca.setFPDFilePath("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd");\r
ca.setActionMessageLevel(ActionMessage.MAX_MESSAGE_LEVEL);\r
- GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
- "m:/tianocore/edk2");\r
- ca.execute();\r
+// GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
+// "m:/tianocore/edk2");\r
+// ca.execute();\r
}\r
}\r