# <PcdName> ::= <TokenSpaceCName> "." <PcdCName>\r
# <TokenSpaceCName> ::= C Variable Name of the Token Space GUID\r
# <PcdCName> ::= C Variable Name of the PCD\r
-# <Offset> ::= {"*"} {<HexNumber>}\r
+# <Offset> ::= {TAB_STAR} {<HexNumber>}\r
# <HexNumber> ::= "0x" (a-fA-F0-9){1,8}\r
# <Size> ::= <HexNumber>\r
# <Value> ::= {<HexNumber>} {<NonNegativeInt>} {<QString>} {<Array>}\r
if (Vpd is None):\r
EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.")\r
\r
- if not (Offset >= 0 or Offset == "*"):\r
+ if not (Offset >= "0" or Offset == TAB_STAR):\r
EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID, "Invalid offset parameter: %s." % Offset)\r
\r
if Vpd.DatumType == TAB_VOID:\r
- if Vpd.MaxDatumSize <= 0:\r
+ if Vpd.MaxDatumSize <= "0":\r
EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
"Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
elif Vpd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
if not Vpd.MaxDatumSize:\r
Vpd.MaxDatumSize = MAX_SIZE_TYPE[Vpd.DatumType]\r
else:\r
- if Vpd.MaxDatumSize <= 0:\r
+ if Vpd.MaxDatumSize <= "0":\r
EdkLogger.error("VpdInfoFile", BuildToolError.PARAMETER_INVALID,\r
"Invalid max datum size for VPD PCD %s.%s" % (Vpd.TokenSpaceGuidCName, Vpd.TokenCName))\r
\r
"Invalid parameter FilePath: %s." % FilePath)\r
\r
Content = FILE_COMMENT_TEMPLATE\r
- Pcds = sorted(self._VpdArray.keys())\r
+ Pcds = sorted(self._VpdArray.keys(), key=lambda x: x.TokenCName)\r
for Pcd in Pcds:\r
i = 0\r
PcdTokenCName = Pcd.TokenCName\r
Found = False\r
\r
if (TokenSpaceName, PcdTokenName) not in self._VpdInfo:\r
- self._VpdInfo[(TokenSpaceName, PcdTokenName)] = []\r
- self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId, Offset, Value))\r
+ self._VpdInfo[(TokenSpaceName, PcdTokenName)] = {}\r
+ self._VpdInfo[(TokenSpaceName, PcdTokenName)][(SkuId, Offset)] = Value\r
for VpdObject in self._VpdArray:\r
VpdObjectTokenCName = VpdObject.TokenCName\r
for PcdItem in GlobalData.MixedPcd:\r
VpdObjectTokenCName = PcdItem[0]\r
for sku in VpdObject.SkuInfoList:\r
if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObjectTokenCName == PcdTokenName.strip() and sku == SkuId:\r
- if self._VpdArray[VpdObject][sku] == "*":\r
- if Offset == "*":\r
+ if self._VpdArray[VpdObject][sku] == TAB_STAR:\r
+ if Offset == TAB_STAR:\r
EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "The offset of %s has not been fixed up by third-party BPDG tool." % PcdName)\r
self._VpdArray[VpdObject][sku] = Offset\r
Found = True\r
return self._VpdArray[vpd]\r
def GetVpdInfo(self, arg):\r
(PcdTokenName, TokenSpaceName) = arg\r
- return self._VpdInfo.get((TokenSpaceName, PcdTokenName))\r
+ return [(sku,offset,value) for (sku,offset),value in self._VpdInfo.get((TokenSpaceName, PcdTokenName)).items()]\r
\r
## Call external BPDG tool to process VPD file\r
#\r
except Exception as X:\r
EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData=str(X))\r
(out, error) = PopenObject.communicate()\r
- print(out)\r
+ print(out.decode(encoding='utf-8', errors='ignore'))\r
while PopenObject.returncode is None :\r
PopenObject.wait()\r
\r
if PopenObject.returncode != 0:\r
- if PopenObject.returncode != 0:\r
- EdkLogger.debug(EdkLogger.DEBUG_1, "Fail to call BPDG tool", str(error))\r
- EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, "Fail to execute BPDG tool with exit code: %d, the error message is: \n %s" % \\r
+ EdkLogger.debug(EdkLogger.DEBUG_1, "Fail to call BPDG tool", str(error))\r
+ EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, "Fail to execute BPDG tool with exit code: %d, the error message is: \n %s" % \\r
(PopenObject.returncode, str(error)))\r
\r
return PopenObject.returncode\r