}\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
privateGlobalName = t.getPrimaryKeyString();\r
}\r
\r
- if (t.isUnicodeStringType()) {\r
- privateGlobalCCode = String.format("%-20s%s[%d];\r\n", "STRING_HEAD", t.getPrimaryKeyString(), t.getSkuIdCount());\r
- } else {\r
- String type = getCType(t);\r
- if (t.datumType == Token.DATUM_TYPE.POINTER) {\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
- bufferSize = t.datumSize;\r
- }\r
- privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\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("%-20s%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
\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("%-20s%s[%d];\r\n", 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
- typeStr = "";\r
+ throw new EntityException("Unknown DATUM_TYPE type in when generating code for VARIABLE_ENABLED PCD entry");\r
}\r
\r
return String.format("%-20s%s;\r\n", typeStr, cName);\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
boolean isDuplicate = false;\r
Token.PCD_TYPE pcdType = Token.PCD_TYPE.UNKNOWN;\r
Token.DATUM_TYPE datumType = Token.DATUM_TYPE.UNKNOWN;\r
- long tokenNumber = 0;\r
+ long tokenNumber = 0;\r
String moduleName = null;\r
String datum = null;\r
int maxDatumSize = 0;\r
- String tokenSpaceGuidString = null;\r
- \r
+ String[] tokenSpaceStrRet = null;\r
+\r
//\r
// ----------------------------------------------\r
// 1), Get all <ModuleSA> from FPD file.\r
// ----------------------------------------------------------------------\r
// \r
for (pcdIndex = 0; pcdIndex < pcdBuildDataArray.size(); pcdIndex ++) {\r
- //tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];\r
- tokenSpaceGuidString = null;\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(tokenSpaceGuidString));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
pcdType = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());\r
datumType = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());\r
tokenNumber = Long.decode(pcdBuildData.getToken().toString());\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
- //String tokenSpaceString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];\r
- String tokenSpaceString = null;\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(tokenSpaceString));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
\r
token.datumType = datumType;\r
token.tokenNumber = tokenNumber;\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
for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) {\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(tokenSpaceGuidString));\r
+ translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
if (dynamicPrimaryKey.equalsIgnoreCase(token.getPrimaryKeyString())) {\r
return dynamicPcdBuildDataArray.get(index);\r
}\r