]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkTasks/org/tianocore/framework/tasks/FfsHeader.java
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / Java / Source / FrameworkTasks / org / tianocore / framework / tasks / FfsHeader.java
diff --git a/Tools/Java/Source/FrameworkTasks/org/tianocore/framework/tasks/FfsHeader.java b/Tools/Java/Source/FrameworkTasks/org/tianocore/framework/tasks/FfsHeader.java
new file mode 100644 (file)
index 0000000..24cb3df
--- /dev/null
@@ -0,0 +1,185 @@
+/** @file\r
+ FfsHeader \r
+\r
+ FfsHeader class describe the struct of Ffs file header.\r
\r
+ Copyright (c) 2006, Intel Corporation\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution.  The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ **/\r
+package org.tianocore.framework.tasks;\r
+\r
+import org.apache.tools.ant.BuildException;\r
+\r
+/**\r
+  FfsHeader\r
+  \r
+  FfsHeader class describe the struct of Ffs file header.\r
+**/\r
+public class FfsHeader {\r
+\r
+    /**\r
+      FfsGuid\r
+      \r
+      FfsGuid is interal class of FfsHeader, it describe the struct of Guid.\r
+    **/\r
+    public class FfsGuid {\r
+\r
+        int    data1      = 0;\r
+        short  data2      = 0;\r
+        short  data3      = 0;\r
+        byte[] data4      = new byte[8];        \r
+        byte[] dataBuffer = new byte[16];\r
+\r
+        /**\r
+          bufferToStruct \r
+          \r
+          This function is to convert GUID to ffsGuid class member.\r
+          \r
+          @param   dataBuffer   Buffer contained the GUID value in byte.\r
+                                For example: if the input string as : "A6F691AC\r
+                                31C8 4444 854C E2C1A6950F92"\r
+                                Then Data1: AC91F6A6\r
+                                Data2: C831\r
+                                Data3: 4444\r
+                                Data4: 4C85E2C1A6950F92\r
+        **/     \r
+        public void bufferToStruct (byte[] dataBuffer){\r
+            if (dataBuffer.length != 16) {\r
+                throw new BuildException ("Buffer is not sized [" + dataBuffer.length + "] for data type, GUID!");\r
+            }\r
+\r
+            data1 = (int)(dataBuffer[3]& 0xff);\r
+            data1 = data1 << 8;     \r
+            data1 = (int)data1 | (dataBuffer[2]& 0xff);         \r
+            data1 = ((data1 << 8) & 0xffff00)   | (dataBuffer[1]& 0xff);\r
+            data1 = ((data1 << 8) & 0xffffff00) | (dataBuffer[0]& 0xff);\r
+\r
+\r
+            data2 = (short) (dataBuffer[5] & 0xff);\r
+            data2 = (short)((data2 << 8) | (dataBuffer[4]& 0xff));\r
+\r
+            data3 = (short)(dataBuffer[7] & 0xff);\r
+            data3 = (short)((data3 << 8) | (dataBuffer[6] & 0xff));\r
+\r
+            for (int i = 0; i < 8; i++) {\r
+                data4[i] = dataBuffer[i+8];\r
+            }\r
+\r
+        }\r
+\r
+        /**\r
+          structToBuffer\r
+          \r
+          This function is to store ffsHeader class member to buffer.\r
+          \r
+          @return        Byte buffer which contained the ffsHeader class member\r
+        **/\r
+        public byte[] structToBuffer (){\r
+\r
+            byte[] buffer = new byte [16];  \r
+\r
+            buffer[3] = (byte)(data1 & 0x000000ff);\r
+            buffer[2] = (byte)((data1 & 0x0000ff00)>> 8);\r
+            buffer[1] = (byte)((data1 & 0x00ff0000)>> 16); \r
+            buffer[0] = (byte)((data1 & 0xff000000)>> 24);\r
+\r
+            buffer[5] = (byte)(data2 & 0x00ff);\r
+            buffer[4] = (byte)((data2 & 0xff00)>> 8);\r
+\r
+            buffer[7] = (byte)(data3 & 0x00ff);\r
+            buffer[6] = (byte)((data3 & 0xff00)>> 8);\r
+\r
+            for (int i = 8; i < 16; i++) {\r
+                buffer[i] = data4[i-8];\r
+            }               \r
+            return buffer;\r
+        }\r
+\r
+\r
+    }\r
+\r
+    /**\r
+      integrityCheckSum\r
+      \r
+      This class is used to record the struct of checksum.\r
+    **/\r
+    public class IntegrityCheckSum {\r
+        byte header;\r
+        byte file;\r
+    }\r
+\r
+    ///\r
+    /// Guid\r
+    ///\r
+    FfsGuid name = new FfsGuid();\r
+\r
+    ///\r
+    /// CheckSum\r
+    ///\r
+    IntegrityCheckSum integrityCheck = new IntegrityCheckSum();\r
+\r
+    ///\r
+    /// File type\r
+    ///\r
+    byte   fileType;\r
+    ///\r
+    /// Ffs attributes.\r
+    ///\r
+    byte   ffsAttributes;\r
+    ///\r
+    /// Ffs file size\r
+    ///\r
+    byte[] ffsFileSize = new byte[3];\r
+    ///\r
+    /// Ffs state.\r
+    ///\r
+    byte   ffsState;\r
+\r
+    /**\r
+      structToBuffer\r
+      \r
+      This function is to store FfsHeader class member to buffer.\r
+      \r
+      @return   Byte buffer which contained the FfsHeader class member.\r
+    **/\r
+    public byte[] structToBuffer () {\r
+        int i;\r
+        byte[] buffer1;         \r
+        byte[] buffer = new byte[24];\r
+        buffer1       = name.structToBuffer();\r
+\r
+        for (i = 0; i < 16; i++) {\r
+            buffer[i] = buffer1[i];\r
+        }\r
+\r
+        buffer[16] = integrityCheck.header;\r
+        buffer[17] = integrityCheck.file;\r
+        buffer[18] = fileType;\r
+        buffer[19] = ffsAttributes;\r
+\r
+        for (i=20; i < 23; i++) {\r
+            buffer[i] = ffsFileSize[i-20];\r
+        }\r
+\r
+        buffer[23] = ffsState;\r
+        return buffer;\r
+    }\r
+\r
+    /**\r
+      getSize\r
+      \r
+      This function is to get the size of FfsHeader in byte.\r
+      \r
+      @return          The size of FfsHeader.\r
+    **/\r
+    public int getSize(){\r
+        return 24;\r
+    }\r
+}\r