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