]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/PcdTools/org/tianocore/pcd/entity/Token.java
Fix track EDKT213: PCD value size should be specificed when generate const variable...
[mirror_edk2.git] / Tools / Source / PcdTools / org / tianocore / pcd / entity / Token.java
index d1867fba5bc76df5514f45f4ad33e72f644a0345..74f55ddec31748b75e9528c4f07496757e775739 100644 (file)
@@ -21,9 +21,6 @@ import java.util.HashMap;
 import java.util.List;\r
 import java.util.Map;\r
 \r
 import java.util.List;\r
 import java.util.Map;\r
 \r
-import org.tianocore.pcd.entity.UsageIdentification;\r
-import org.tianocore.pcd.exception.EntityException;\r
-\r
 /**\r
    This class is to descript a PCD token object. The information of a token mainly\r
    comes from MSA, SPD and setting produced by platform developer.\r
 /**\r
    This class is to descript a PCD token object. The information of a token mainly\r
    comes from MSA, SPD and setting produced by platform developer.\r
@@ -32,7 +29,7 @@ public class Token {
     ///\r
     /// Enumeration macro defintion for PCD type.\r
     ///\r
     ///\r
     /// Enumeration macro defintion for PCD type.\r
     ///\r
-    public enum             PCD_TYPE {FEATURE_FLAG, FIXED_AT_BUILD, PATCHABLE_IN_MODULE, DYNAMIC,\r
+    public static enum      PCD_TYPE {FEATURE_FLAG, FIXED_AT_BUILD, PATCHABLE_IN_MODULE, DYNAMIC,\r
                                       DYNAMIC_EX, UNKNOWN}\r
 \r
     ///\r
                                       DYNAMIC_EX, UNKNOWN}\r
 \r
     ///\r
@@ -40,12 +37,12 @@ public class Token {
     /// Wizard maybe expand this type as "int, unsigned int, short, unsigned short etc" in\r
     /// prompt dialog.\r
     ///\r
     /// Wizard maybe expand this type as "int, unsigned int, short, unsigned short etc" in\r
     /// prompt dialog.\r
     ///\r
-    public enum             DATUM_TYPE {UINT8, UINT16, UINT32, UINT64, BOOLEAN, POINTER, UNKNOWN}\r
+    public static enum      DATUM_TYPE {UINT8, UINT16, UINT32, UINT64, BOOLEAN, POINTER, UNKNOWN}\r
 \r
     ///\r
     /// Enumeration macor defintion for usage of PCD\r
     ///\r
 \r
     ///\r
     /// Enumeration macor defintion for usage of PCD\r
     ///\r
-    public enum             PCD_USAGE {ALWAYS_PRODUCED, ALWAYS_CONSUMED, SOMETIMES_PRODUCED,\r
+    public static enum      PCD_USAGE {ALWAYS_PRODUCED, ALWAYS_CONSUMED, SOMETIMES_PRODUCED,\r
                                        SOMETIMES_CONSUMED, UNKNOWN}\r
 \r
     ///\r
                                        SOMETIMES_CONSUMED, UNKNOWN}\r
 \r
     ///\r
@@ -169,7 +166,7 @@ public class Token {
 \r
     /**\r
        The pcd type is DynamicEx?\r
 \r
     /**\r
        The pcd type is DynamicEx?\r
-         \r
+\r
        @retval true     Is DynamicEx type\r
        @retval false    not DynamicEx type\r
     **/\r
        @retval true     Is DynamicEx type\r
        @retval false    not DynamicEx type\r
     **/\r
@@ -196,7 +193,7 @@ public class Token {
         if (tokenSpaceName == null) {\r
             return cName + "_nullTokenSpaceGuid";\r
         } else {\r
         if (tokenSpaceName == null) {\r
             return cName + "_nullTokenSpaceGuid";\r
         } else {\r
-            return cName + "_" + tokenSpaceName.toString().replace('-', '_');\r
+            return cName + "_" + tokenSpaceName.toString().replace('-', '_').toLowerCase();\r
         }\r
     }\r
 \r
         }\r
     }\r
 \r
@@ -285,16 +282,9 @@ public class Token {
       @retval TRUE  - Success to add usage instance.\r
       @retval FALSE - Fail to add usage instance\r
     **/\r
       @retval TRUE  - Success to add usage instance.\r
       @retval FALSE - Fail to add usage instance\r
     **/\r
-    public boolean addUsageInstance(UsageInstance usageInstance) throws EntityException {\r
-        String exceptionStr;\r
-\r
+    public boolean addUsageInstance(UsageInstance usageInstance) {\r
         if (isUsageInstanceExist(usageInstance.usageId)) {\r
         if (isUsageInstanceExist(usageInstance.usageId)) {\r
-            exceptionStr = String.format("[PCD Collection Tool Exception] PCD %s for module %s has already exist in database, Please check all PCD build entries "+\r
-                                         "in modules %s in <ModuleSA> to make sure no duplicated definitions in FPD file!",\r
-                                         usageInstance.parentToken.cName,\r
-                                         usageInstance.usageId.moduleName,\r
-                                         usageInstance.usageId.moduleName);\r
-            throw new EntityException(exceptionStr);\r
+            return false;\r
         }\r
 \r
         //\r
         }\r
 \r
         //\r
@@ -631,7 +621,7 @@ public class Token {
     }\r
 \r
     /**\r
     }\r
 \r
     /**\r
-        Judge whether a DYNAMIC PCD has default value. \r
+        Judge whether a DYNAMIC PCD has default value.\r
 \r
         @return whether a DYNAMIC PCD has default value.\r
     **/\r
 \r
         @return whether a DYNAMIC PCD has default value.\r
     **/\r
@@ -832,12 +822,137 @@ public class Token {
 \r
     /**\r
        Get string value for ANSIC string type\r
 \r
     /**\r
        Get string value for ANSIC string type\r
-         \r
+\r
        @return String the string value\r
     **/\r
     public String getStringTypeString () {\r
         return getDefaultSku().value.substring(2, getDefaultSku().value.length() - 1);\r
     }\r
        @return String the string value\r
     **/\r
     public String getStringTypeString () {\r
         return getDefaultSku().value.substring(2, getDefaultSku().value.length() - 1);\r
     }\r
+\r
+    /**\r
+       Judge whether a datum string is byte array.\r
+       \r
+       @param datum             datum string\r
+       \r
+       @return boolean          true - is byte array, false - not byte array\r
+    **/\r
+    public static boolean isByteArrayDatum(String datum) {\r
+        if (datum == null) {\r
+            return false;\r
+        }\r
+\r
+        String trimedStr = datum.trim();\r
+\r
+        if (trimedStr.length() == 0) {\r
+            return false;\r
+        }\r
+\r
+        if (trimedStr.startsWith("{") && \r
+            trimedStr.endsWith("}")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    /**\r
+       Judge whether a datum string is unicode.\r
+       \r
+       @param datum             datum string\r
+       \r
+       @return boolean          true - is unicode, false - not unicode\r
+    **/\r
+    public static boolean isUnicodeDatum(String datum) {\r
+        if (datum  == null) {\r
+            return false;\r
+        }\r
+\r
+        String trimedStr = datum.trim();\r
+        if (trimedStr.length() == 0) {\r
+            return false;\r
+        }\r
+\r
+        if (trimedStr.startsWith("L")  &&\r
+            trimedStr.charAt(1) == '"' &&\r
+            trimedStr.endsWith("\"")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    /**\r
+       Judge whether a datum string is ANSCI string.\r
+       \r
+       @param datum             datum string\r
+       \r
+       @return boolean          true - is ANSIC, false - not ANSIC\r
+    **/\r
+    public static boolean isAnsciDatum(String datum) {\r
+        if (datum == null) {\r
+            return false;\r
+        }\r
+\r
+        String trimedStr = datum.trim();\r
+\r
+        if (trimedStr.length() == 0) {\r
+            return false;\r
+        }\r
+\r
+        if (datum.startsWith("\"") &&\r
+            datum.endsWith("\"")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    /**\r
+       Get byte array string for POINTER type Datum.\r
+       \r
+       @param datum         the datum whose type is POINTER\r
+       \r
+       @return String       the byte array string\r
+    **/\r
+    public String getByteArrayForPointerDatum(String datum) {\r
+        String byteArray = "{";\r
+\r
+        if (datumType != Token.DATUM_TYPE.POINTER) {\r
+            return null;\r
+        }\r
+\r
+        if (Token.isAnsciDatum(datum)) {\r
+            String trimedStr = datum.trim();\r
+            trimedStr = trimedStr.substring(1, trimedStr.length() - 1);\r
+            char charArray[] = trimedStr.toCharArray();\r
+            for (int index = 0; index < charArray.length; index++) {\r
+                byteArray += String.format("0x%02x ", (byte)charArray[index]);\r
+                if (index != (charArray.length - 1)) {\r
+                    byteArray += ",";\r
+                }\r
+            }\r
+        } else if (Token.isUnicodeDatum(datum)) {\r
+            String trimedStr = datum.trim();\r
+            trimedStr = trimedStr.substring(2, trimedStr.length() - 1);\r
+            for (int index = 0; index < trimedStr.length(); index++) {\r
+                short unicodeVal = (short)trimedStr.codePointAt(index);\r
+                byteArray += String.format("0x%02x, 0x%02x", \r
+                                           (byte)unicodeVal,\r
+                                           (byte)((unicodeVal & 0xFF00) >> 8));\r
+                if (index != (trimedStr.length() - 1)) {\r
+                    byteArray += " ,";\r
+                }\r
+            }\r
+        } else if (Token.isByteArrayDatum(datum)){\r
+            return datum;\r
+        } else {\r
+            return null;\r
+        }\r
+\r
+        byteArray += "}";\r
+\r
+        return byteArray;\r
+    }\r
 }\r
 \r
 \r
 }\r
 \r
 \r