import javax.swing.JPanel;\r
\r
import javax.swing.AbstractAction;\r
-import javax.swing.DefaultCellEditor;\r
import javax.swing.JFileChooser;\r
import javax.swing.JFrame;\r
import javax.swing.JOptionPane;\r
import javax.swing.event.TableModelEvent;\r
import javax.swing.event.TableModelListener;\r
import javax.swing.table.DefaultTableModel;\r
-import javax.swing.table.TableColumn;\r
import javax.swing.table.TableModel;\r
import javax.swing.JComboBox;\r
import java.awt.Dimension;\r
private int selectedRowInFvAdditionalTable = -1;\r
private String oldFvName = null;\r
private Vector<String> vBlockSize = new Vector<String>();\r
- private String erasePolarity = null;\r
+ private String determinedFvBlockSize = null;\r
+ private String erasePolarity = "";\r
boolean memModified = false;\r
\r
\r
public FpdFlash(OpeningPlatformType opt) {\r
this(opt.getXmlFpd());\r
docConsole = opt;\r
+ if (memModified) {\r
+ docConsole.setSaved(false);\r
+ JOptionPane.showMessageDialog(frame, "Platform Synced with FDF file.");\r
+ memModified = false;\r
+ }\r
}\r
\r
/**\r
private void initFvInFdfTable(String fdfPath){\r
Vector<FvInfoFromFdf> vFvInfo = new Vector<FvInfoFromFdf>();\r
getFvInfoFromFdf(fdfPath, vFvInfo);\r
- getFlashInfoFromFdf (fdfPath, vBlockSize, erasePolarity);\r
- ffc.setTypedFvImageNameValue("Attributes", "ErasePolarity", erasePolarity);\r
+ getFlashInfoFromFdf (fdfPath);\r
+ if (!erasePolarity.equals("1") && !erasePolarity.equals("0")) {\r
+ JOptionPane.showMessageDialog(frame, "FDF file does NOT contain valid Erase Polarity.");\r
+ }\r
+ else {\r
+ ffc.setTypedFvImageNameValue("Attributes", "ErasePolarity", erasePolarity);\r
+ }\r
+ \r
// BugBug: assume all blocks have same size;\r
- String blkSize = vBlockSize.get(0);\r
+ \r
+ String blkSize = "0x10000";\r
+ if (vBlockSize.size() > 0) {\r
+ blkSize = vBlockSize.get(0);\r
+ if (!DataValidation.isInt(blkSize) && !DataValidation.isHexDoubleWordDataType(blkSize)) {\r
+ JOptionPane.showMessageDialog(frame, "FDF file does NOT contain valid FV block size. Default size 0x10000 will be used.");\r
+ blkSize = "0x10000";\r
+ }\r
+ }\r
+ determinedFvBlockSize = blkSize;\r
\r
getFvInFdfTableModel().setRowCount(0);\r
for (int j = 0; j < vFvInfo.size(); ++j) {\r
FvInfoFromFdf fvInfo = vFvInfo.get(j);\r
String[] row = {fvInfo.getFvName(), fvInfo.getSize(), fvInfo.getEfiFileName()};\r
+ // if FV addtional table contains the same FV from fdf file, remove that row.\r
+ for (int k = 0; k < jTableFvAdditional.getRowCount(); ++k) {\r
+ if (fvAdditionalTableModel.getValueAt(k, 0).equals(row[0])) {\r
+ fvAdditionalTableModel.removeRow(k);\r
+ }\r
+ }\r
getFvInFdfTableModel().addRow(row);\r
try {\r
int blockSize = Integer.decode(blkSize);\r
int fvSize = Integer.decode(row[1]);\r
int numBlocks = fvSize/blockSize;\r
+ HashMap<String, String> mOptions = new HashMap<String, String>();\r
// if no options for this FV before, generate a new options entry for this FV.\r
if (ffc.getFvImagesFvImageWithName(row[0], "Options") == null) {\r
- HashMap<String, String> mOptions = new HashMap<String, String>();\r
+ \r
mOptions.put("EFI_BLOCK_SIZE", blkSize);\r
mOptions.put("EFI_NUM_BLOCKS", numBlocks+"");\r
mOptions.put("EFI_FILE_NAME", row[2]);\r
memModified = true;\r
}\r
else {\r
- ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_BLOCK_SIZE", blkSize);\r
- ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_NUM_BLOCKS", numBlocks + "");\r
- ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_FILE_NAME", row[2]);\r
+ ffc.getFvImagesFvImageOptions(row[0], mOptions);\r
+ if (mOptions.get("EFI_BLOCK_SIZE") == null || !mOptions.get("EFI_BLOCK_SIZE").equalsIgnoreCase(blkSize)) {\r
+ ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_BLOCK_SIZE", blkSize);\r
+ memModified = true;\r
+ }\r
+ if (mOptions.get("EFI_NUM_BLOCKS") == null || Integer.decode(mOptions.get("EFI_NUM_BLOCKS")) != numBlocks) {\r
+ ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_NUM_BLOCKS", numBlocks + "");\r
+ memModified = true;\r
+ }\r
+ if (mOptions.get("EFI_FILE_NAME") == null || !mOptions.get("EFI_FILE_NAME").equals(row[2])) {\r
+ ffc.setTypedNamedFvImageNameValue(row[0], "Options", "EFI_FILE_NAME", row[2]);\r
+ memModified = true;\r
+ }\r
+ \r
}\r
}\r
catch (NumberFormatException e){\r
int row = arg0.getFirstRow();\r
int col = arg0.getColumn();\r
TableModel m = (TableModel) arg0.getSource();\r
+ \r
if (arg0.getType() == TableModelEvent.UPDATE) {\r
if (col == 0) {\r
String newFvName = m.getValueAt(row, 0) + "";\r
String[] fvNames = {newFvName};\r
ffc.AddFvImageFvImageNames(fvNames);\r
}\r
- \r
+ docConsole.setSaved(false);\r
oldFvName = newFvName;\r
}\r
- docConsole.setSaved(false);\r
+ \r
+ if (col == 1) {\r
+ String fvSize = m.getValueAt(row, col) + "";\r
+ if (!DataValidation.isInt(fvSize) && !DataValidation.isHexDoubleWordDataType(fvSize)) {\r
+ JOptionPane.showMessageDialog(frame, "FV size should be Integer or Hex format.");\r
+ return;\r
+ }\r
+ HashMap<String, String> mFvOpts = new HashMap<String, String>();\r
+ ffc.getFvImagesFvImageOptions(oldFvName, mFvOpts);\r
+ String blkSize = mFvOpts.get("EFI_BLOCK_SIZE");\r
+ if (blkSize == null) {\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", determinedFvBlockSize);\r
+ int fs = Integer.decode(fvSize);\r
+ int bs = Integer.decode(determinedFvBlockSize);\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_NUM_BLOCKS", (fs/bs)+"");\r
+ docConsole.setSaved(false);\r
+ }\r
+ else {\r
+ if (!DataValidation.isInt(blkSize) && !DataValidation.isHexDoubleWordDataType(blkSize)) {\r
+ int retVal = JOptionPane.showConfirmDialog(frame, "Confirm", "FPD file contains error block size format. Would you like to replace it with a default value?", JOptionPane.YES_NO_OPTION);\r
+ if (retVal == JOptionPane.YES_OPTION) {\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", determinedFvBlockSize);\r
+ int fs = Integer.decode(fvSize);\r
+ int bs = Integer.decode(determinedFvBlockSize);\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_NUM_BLOCKS", (fs/bs)+"");\r
+ docConsole.setSaved(false);\r
+ return;\r
+ }\r
+ else {\r
+ return;\r
+ }\r
+ \r
+ }\r
+ int fs = Integer.decode(fvSize);\r
+ int bs = Integer.decode(blkSize);\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_NUM_BLOCKS", (fs/bs)+"");\r
+ docConsole.setSaved(false);\r
+ }\r
+ }\r
+ \r
+ if (col == 2) {\r
+ ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_FILE_NAME", m.getValueAt(row, col)+"");\r
+ docConsole.setSaved(false);\r
+ }\r
+ \r
}\r
}\r
});\r
\r
jTextFieldFdf.setText("");\r
String fdfFile = ffc.getFlashDefinitionFile();\r
- if (fdfFile != null) {\r
+ if (fdfFile != null && fdfFile.length() > 0) {\r
jTextFieldFdf.setText(fdfFile);\r
+ String fdfPath = System.getenv("WORKSPACE") + File.separator + fdfFile;\r
+ initFvInFdfTable(fdfPath);\r
}\r
\r
- String fdfPath = System.getenv("WORKSPACE") + File.separator + fdfFile;\r
- initFvInFdfTable(fdfPath);\r
initFvAdditionalTable();\r
}\r
\r
return jContentPane;\r
}\r
\r
- private void getFlashInfoFromFdf (String fdfPath, Vector<String> vBlockSize, String erasePolarity) {\r
+ private void getFlashInfoFromFdf (String fdfPath) {\r
File fdf = new File(fdfPath);\r
if (!fdf.exists()) {\r
return;\r
// ErasePolarity\r
//\r
if (str.startsWith("ErasePolarity")) {\r
- erasePolarity = str.substring(str.indexOf("=") + 1, str.lastIndexOf(","));\r
+ erasePolarity = str.substring(str.indexOf("=") + 1, str.lastIndexOf(",")).trim();\r
}\r
//\r
// dig into Block section.\r