00001
00002
00003
00004
00005
00006
00007 package GuiComponents.SctApi;
00008
00009 import java.awt.Window;
00010
00011 import javax.swing.DefaultComboBoxModel;
00012 import javax.swing.JFrame;
00013 import javax.swing.JOptionPane;
00014 import javax.swing.JPanel;
00015 import javax.swing.table.TableModel;
00016 import javax.swing.table.TableColumn;
00017 import javax.swing.table.TableColumn;
00018 import javax.swing.table.JTableHeader;
00019
00020 import Sct_SctApi.SctApi;
00021
00022 import Sct.SerializableWrapper;
00023 import SctData.ModuleConfiguration;
00024
00030 public class ModuleConfigurations extends JPanel implements java.io.Serializable {
00031 BlockTableModel bTableModel;
00032
00033 int partition;
00034 int crate;
00035 int rod;
00036 Sct_SctApi.SctApi api;
00037
00039 public ModuleConfigurations() {
00040 initComponents();
00041 modifyComponents();
00042 }
00043
00045 public ModuleConfigurations(int p, int c, int r, Sct_SctApi.SctApi a) {
00046 partition = p;
00047 crate = c;
00048 rod = r;
00049 api = a;
00050
00051 initComponents();
00052 modifyComponents();
00053 }
00054
00055 public static void main(String [] args) {
00056 javax.swing.JFrame f = new javax.swing.JFrame("ROD Diag test");
00057
00058 ModuleConfigurations conf = new ModuleConfigurations();
00059
00060 f.getContentPane().add(conf);
00061 f.pack();
00062 f.setVisible(true);
00063
00064 sctConf.ABCDConfig bConfig = new sctConf.ABCDConfig((short)0);
00065
00066 short sz = (short)0;
00067 byte bz = (byte)0;
00068
00069 int mask[] = {0, 0xffff, 0xffffffff, 3};
00070 sctConf.ABCDBasic basic = new sctConf.ABCDBasic(bConfig, sz, bz, bz, bz, bz, bz, mask);
00071
00072 float rc[] = {0.0f, 0.0f, 0.0f};
00073 int dummy[] = {0, 0};
00074 sctConf.ABCDCaldata data = new sctConf.ABCDCaldata(bz, rc, 1.0f, dummy);
00075
00076 byte trims[] = {0};
00077 sctConf.ABCDChip chip = new sctConf.ABCDChip(bz, bz, bz, bz, basic, data, trims);
00078 byte rxs[] = {2, 3};
00079 byte bdummy[] = {0, 0};
00080 sctConf.ABCDModule newConfig = new sctConf.ABCDModule(null, bz, bz, bz, bz, 0, bz, bz, rxs, bdummy, dummy);
00081 newConfig.chip = new sctConf.ABCDChip[12];
00082 for(int i=0; i<12; i++) {
00083 newConfig.chip[i] = chip;
00084 }
00085
00086 if(newConfig != null) {
00087 conf.inspectorPanel1.setData(new SerializableWrapper(new ModuleConfiguration(newConfig), "no serial number", "ModuleConfiguration"));
00088 }
00089 }
00090
00091
00092 void modifyComponents() {
00093 }
00094
00100 private void initComponents() {
00101 java.awt.GridBagConstraints gridBagConstraints;
00102
00103 jPanel2 = new javax.swing.JPanel();
00104 jLabel3 = new javax.swing.JLabel();
00105 jTextField2 = new javax.swing.JTextField();
00106 jLabel4 = new javax.swing.JLabel();
00107 jTextField3 = new javax.swing.JTextField();
00108 jLabel5 = new javax.swing.JLabel();
00109 jTextField4 = new javax.swing.JTextField();
00110 jLabel7 = new javax.swing.JLabel();
00111 jTextField6 = new javax.swing.JTextField();
00112 jPanel3 = new javax.swing.JPanel();
00113 jPanel4 = new javax.swing.JPanel();
00114 jLabel2 = new javax.swing.JLabel();
00115 slotText = new javax.swing.JTextField();
00116 jLabel8 = new javax.swing.JLabel();
00117 bankCombo = new javax.swing.JComboBox();
00118 jButton5 = new javax.swing.JButton();
00119 jPanel5 = new javax.swing.JPanel();
00120 jLabel11 = new javax.swing.JLabel();
00121 currBankLabel = new javax.swing.JLabel();
00122 jLabel12 = new javax.swing.JLabel();
00123 currSlotLabel = new javax.swing.JLabel();
00124 inspectorPanel1 = new GuiComponents.Inspector.InspectorPanel();
00125 jPanel1 = new javax.swing.JPanel();
00126 jLabel1 = new javax.swing.JLabel();
00127 varTypeCombo = new javax.swing.JComboBox();
00128 varValueText = new javax.swing.JTextField();
00129 changeButton = new javax.swing.JButton();
00130
00131 setLayout(new java.awt.BorderLayout());
00132
00133 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
00134
00135 jLabel3.setText("Partition");
00136 jPanel2.add(jLabel3);
00137
00138 jTextField2.setEditable(false);
00139 jTextField2.setText(new Integer(getPartition()).toString());
00140 jPanel2.add(jTextField2);
00141
00142 jLabel4.setText("Crate");
00143 jPanel2.add(jLabel4);
00144
00145 jTextField3.setEditable(false);
00146 jTextField3.setText(new Integer(getCrate()).toString());
00147 jPanel2.add(jTextField3);
00148
00149 jLabel5.setText("ROD");
00150 jPanel2.add(jLabel5);
00151
00152 jTextField4.setEditable(false);
00153 jTextField4.setText(new Integer(getROD()).toString());
00154 jPanel2.add(jTextField4);
00155
00156 jLabel7.setText("Slot");
00157 jPanel2.add(jLabel7);
00158
00159 jTextField6.setEditable(false);
00160 jTextField6.setText(getRODSlot());
00161 jPanel2.add(jTextField6);
00162
00163 add(jPanel2, java.awt.BorderLayout.NORTH);
00164
00165 jPanel3.setLayout(new java.awt.GridBagLayout());
00166
00167 jPanel4.setLayout(new java.awt.GridBagLayout());
00168
00169 jLabel2.setText("Module Slot");
00170 gridBagConstraints = new java.awt.GridBagConstraints();
00171 gridBagConstraints.gridy = 0;
00172 jPanel4.add(jLabel2, gridBagConstraints);
00173
00174 slotText.setText("0");
00175 gridBagConstraints = new java.awt.GridBagConstraints();
00176 gridBagConstraints.gridy = 0;
00177 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00178 gridBagConstraints.weightx = 0.1;
00179 jPanel4.add(slotText, gridBagConstraints);
00180
00181 jLabel8.setText("Module bank");
00182 gridBagConstraints = new java.awt.GridBagConstraints();
00183 gridBagConstraints.gridy = 1;
00184 jPanel4.add(jLabel8, gridBagConstraints);
00185
00186 bankCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Physics", "Calibration", "Scan", "SctApi", "Configuration" }));
00187 gridBagConstraints = new java.awt.GridBagConstraints();
00188 gridBagConstraints.gridy = 1;
00189 gridBagConstraints.weightx = 0.1;
00190 jPanel4.add(bankCombo, gridBagConstraints);
00191
00192 jButton5.setText("Get Module Configuration");
00193 jButton5.setEnabled(isRODValid());
00194 jButton5.addActionListener(new java.awt.event.ActionListener() {
00195 public void actionPerformed(java.awt.event.ActionEvent evt) {
00196 getModuleConfigurationActionPerformed(evt);
00197 }
00198 });
00199
00200 gridBagConstraints = new java.awt.GridBagConstraints();
00201 gridBagConstraints.gridy = 1;
00202 gridBagConstraints.gridwidth = 2;
00203 jPanel4.add(jButton5, gridBagConstraints);
00204
00205 gridBagConstraints = new java.awt.GridBagConstraints();
00206 gridBagConstraints.gridy = 0;
00207 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00208 gridBagConstraints.weightx = 1.0;
00209 jPanel3.add(jPanel4, gridBagConstraints);
00210
00211 jLabel11.setText("Bank");
00212 jPanel5.add(jLabel11);
00213
00214 currBankLabel.setText("-");
00215 jPanel5.add(currBankLabel);
00216
00217 jLabel12.setText("Slot");
00218 jPanel5.add(jLabel12);
00219
00220 currSlotLabel.setText("0");
00221 jPanel5.add(currSlotLabel);
00222
00223 gridBagConstraints = new java.awt.GridBagConstraints();
00224 gridBagConstraints.gridy = 1;
00225 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00226 gridBagConstraints.weightx = 1.0;
00227 jPanel3.add(jPanel5, gridBagConstraints);
00228
00229 inspectorPanel1.setMinimumSize(new java.awt.Dimension(50, 40));
00230 gridBagConstraints = new java.awt.GridBagConstraints();
00231 gridBagConstraints.gridy = 2;
00232 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00233 gridBagConstraints.weightx = 1.0;
00234 gridBagConstraints.weighty = 0.1;
00235 jPanel3.add(inspectorPanel1, gridBagConstraints);
00236
00237 add(jPanel3, java.awt.BorderLayout.CENTER);
00238
00239 jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
00240
00241 jPanel1.setOpaque(false);
00242 jLabel1.setText("Modify variable");
00243 jPanel1.add(jLabel1);
00244
00245 varTypeCombo.setModel(new DefaultComboBoxModel(getScanList()));
00246 jPanel1.add(varTypeCombo);
00247
00248 varValueText.setText("0");
00249 jPanel1.add(varValueText);
00250
00251 changeButton.setText("Change");
00252 changeButton.addActionListener(new java.awt.event.ActionListener() {
00253 public void actionPerformed(java.awt.event.ActionEvent evt) {
00254 changeModuleConfigurationPerformed(evt);
00255 }
00256 });
00257
00258 jPanel1.add(changeButton);
00259
00260 add(jPanel1, java.awt.BorderLayout.SOUTH);
00261
00262 }
00263
00264 private void getModuleConfigurationActionPerformed(java.awt.event.ActionEvent evt) {
00265 getModuleConfiguration();
00266 }
00267
00268 private void getModuleConfiguration() {
00269 int slot = Long.decode(slotText.getText()).intValue();
00270 String bank = (String)bankCombo.getSelectedItem();
00271 sctConf.ABCDModule newConfig = null;
00272 if(bank.equals("SctApi")) {
00273 newConfig = api.retrieveModule(api.findModuleRod(getPartition(), getCrate(), getROD(), slot));
00274 } else if(bank.equals("Configuration")) {
00275 JOptionPane.showMessageDialog(null, "Unimplemented bank type");
00276 return;
00277 } else {
00278 Sct_SctApi.BankType realBank;
00279 if(bank.equals("Physics")) {
00280 realBank = Sct_SctApi.BankType.PHYSICS_CONFIG;
00281 } else if(bank.equals("Calibration")) {
00282 realBank = Sct_SctApi.BankType.CALIBRATION_CONFIG;
00283 } else if(bank.equals("Scan")) {
00284 realBank = Sct_SctApi.BankType.SCAN_CONFIG;
00285 } else {
00286 JOptionPane.showMessageDialog(null, "Unknown bank type");
00287 return;
00288 }
00289
00290 try {
00291 newConfig = api.getABCDModuleRaw(getPartition(), getCrate(), getROD(), slot, realBank);
00292 } catch(Sct_SctApi.SctApiException e) {
00293 JOptionPane.showMessageDialog(null, "Exception thrown by API: " + e.detail);
00294 }
00295 }
00296
00297 if(newConfig != null) {
00298
00299 inspectorPanel1.setData(new SerializableWrapper(new ModuleConfiguration(newConfig), "no serial number", "ModuleConfiguration"));
00300
00301
00302 currBankLabel.setText(bank);
00303 currSlotLabel.setText("" + slot);
00304 }
00305 }
00306
00307 private void changeModuleConfigurationPerformed(java.awt.event.ActionEvent evt) {
00308 int slot = Long.decode(slotText.getText()).intValue();
00309 String bank = (String)bankCombo.getSelectedItem();
00310 short type = (short)Sct.ScanDescriptors.getInstance().valueFor((String)varTypeCombo.getSelectedItem());
00311 float value = Float.parseFloat(varValueText.getText());
00312
00313 if(bank.equals("SctApi")) {
00314 api.modifyABCDModuleVar(api.findModuleRod(getPartition(), getCrate(), getROD(), slot),
00315 type, value);
00316 getModuleConfiguration();
00317 } else if(bank.equals("Configuration")) {
00318 JOptionPane.showMessageDialog(null, "Unimplemented bank type");
00319 return;
00320 } else {
00321 Sct_SctApi.BankType realBank;
00322 if(bank.equals("Physics")) {
00323 realBank = Sct_SctApi.BankType.PHYSICS_CONFIG;
00324 } else if(bank.equals("Calibration")) {
00325 realBank = Sct_SctApi.BankType.CALIBRATION_CONFIG;
00326 } else if(bank.equals("Scan")) {
00327 realBank = Sct_SctApi.BankType.SCAN_CONFIG;
00328 } else {
00329 JOptionPane.showMessageDialog(null, "Unknown bank type");
00330 return;
00331 }
00332
00333 api.modifyABCDModuleVarROD(api.findModuleRod(getPartition(), getCrate(), getROD(), slot),
00334 type, value, realBank);
00335 getModuleConfiguration();
00336 }
00337 }
00338
00339 public String[] getScanList() {
00340 return Sct.ScanDescriptors.getInstance().listDescriptors();
00341 }
00342
00343 public TableModel getBlockTableModel() {
00344 if(bTableModel == null) {
00345 int [] nullBlock = {};
00346
00347 bTableModel = new ModuleConfigurations.BlockTableModel(nullBlock);
00348 }
00349
00350 return bTableModel;
00351 }
00352
00353 public int getPartition() {
00354 return partition;
00355 }
00356
00357 public int getCrate() {
00358 return crate;
00359 }
00360
00361 public int getROD() {
00362 return rod;
00363 }
00364
00365 public String getRODSlot() {
00366 try {
00367 long rodSlot = api.getRodSlot(partition, crate, rod);
00368 return "" + rodSlot;
00369 } catch(NullPointerException n) {
00370 return "No API";
00371 }
00372 }
00373
00374 public boolean isRODValid() {
00375 if(api == null) {
00376 if(getTopLevelAncestor() == null) {
00377
00378 return false;
00379 } else {
00380 ((Window)getTopLevelAncestor()).dispose();
00381 return false;
00382 }
00383 } else {
00384 return api.isRODPresent(partition, crate, rod);
00385 }
00386 }
00387
00392 public void setPartition(int partition) { this.partition = partition; }
00393
00394 public class BlockTableModel extends javax.swing.table.AbstractTableModel {
00395 int [] blockArray;
00396
00397 public BlockTableModel(int [] block) {
00398 blockArray = block;
00399 }
00400
00401 public void newData(int [] block) {
00402 blockArray = block;
00403 fireTableDataChanged();
00404 }
00405
00406 public int getColumnCount() {
00407
00408 return 16+2;
00409 }
00410
00411 public int getRowCount() {
00412 return (blockArray.length+7) / 8;
00413 }
00414
00415 public Object getValueAt(int rowIndex, int columnIndex) {
00416
00417
00418
00419 if(columnIndex == 0) {
00420 return Integer.toHexString(rowIndex*32);
00421 } else if(columnIndex == 17) {
00422 StringBuffer buff = new StringBuffer();
00423
00424 int offset = rowIndex*8;
00425
00426 for(int i=0; i<8; i++) {
00427 if(offset + i >= blockArray.length) {
00428 break;
00429 }
00430
00431 for(int j=0; j<4; j++) {
00432 int ascii = (blockArray[offset + i] >> (8*j)) & 0xff;
00433 if(ascii >= 32 && ascii < 128) {
00434 buff.append((char)ascii);
00435 } else {
00436 buff.append(".");
00437 }
00438 }
00439
00440 buff.append(" ");
00441 }
00442 return buff.toString();
00443 } else {
00444 columnIndex --;
00445 if((columnIndex/2) + rowIndex*8 >= blockArray.length) {
00446 return null;
00447 } else {
00448 int value = blockArray[(columnIndex/2) + rowIndex*8];
00449 String hexString = Integer.toHexString(value);
00450 if(columnIndex % 2 == 0) {
00451 if(hexString.length() > 4) {
00452 hexString = hexString.substring(0, hexString.length()-4);
00453 } else {
00454 hexString = "0000";
00455 }
00456 } else {
00457 if(hexString.length() > 4) {
00458 hexString = hexString.substring(hexString.length()-4);
00459 } else {
00460
00461 }
00462 }
00463 return "0000".substring(0, 4-hexString.length()) + hexString;
00464 }
00465 }
00466 }
00467
00468 public String getColumnName(int columnIndex) {
00469 String retValue;
00470
00471 if(columnIndex == 0) {
00472 retValue = "";
00473 } else if(columnIndex == 17) {
00474 retValue = "ASCII";
00475 } else {
00476 columnIndex--;
00477 retValue = Integer.toHexString((columnIndex * 2));
00478 }
00479
00480 return retValue;
00481 }
00482 }
00483
00484
00485 private javax.swing.JComboBox bankCombo;
00486 private javax.swing.JButton changeButton;
00487 private javax.swing.JLabel currBankLabel;
00488 private javax.swing.JLabel currSlotLabel;
00489 private GuiComponents.Inspector.InspectorPanel inspectorPanel1;
00490 private javax.swing.JButton jButton5;
00491 private javax.swing.JLabel jLabel1;
00492 private javax.swing.JLabel jLabel11;
00493 private javax.swing.JLabel jLabel12;
00494 private javax.swing.JLabel jLabel2;
00495 private javax.swing.JLabel jLabel3;
00496 private javax.swing.JLabel jLabel4;
00497 private javax.swing.JLabel jLabel5;
00498 private javax.swing.JLabel jLabel7;
00499 private javax.swing.JLabel jLabel8;
00500 private javax.swing.JPanel jPanel1;
00501 private javax.swing.JPanel jPanel2;
00502 private javax.swing.JPanel jPanel3;
00503 private javax.swing.JPanel jPanel4;
00504 private javax.swing.JPanel jPanel5;
00505 private javax.swing.JTextField jTextField2;
00506 private javax.swing.JTextField jTextField3;
00507 private javax.swing.JTextField jTextField4;
00508 private javax.swing.JTextField jTextField6;
00509 private javax.swing.JTextField slotText;
00510 private javax.swing.JComboBox varTypeCombo;
00511 private javax.swing.JTextField varValueText;
00512
00513
00514 }