00001
00002
00003
00004
00005
00006
00007 package GuiComponents.SctApi;
00008
00009 import java.awt.Window;
00010
00011 import javax.swing.JFrame;
00012 import javax.swing.JPanel;
00013 import javax.swing.table.TableModel;
00014 import javax.swing.table.TableColumn;
00015 import javax.swing.table.JTableHeader;
00016
00017 import Sct_SctApi.SctApi;
00018
00024 public class BocDiagnostics extends JPanel implements java.io.Serializable {
00025 BocSetupTableModel bocTableModel;
00026
00027 int partition;
00028 int crate;
00029 int rod;
00030 Sct_SctApi.SctApi api;
00031
00033 public BocDiagnostics() {
00034 initComponents();
00035 modifyComponents();
00036 }
00037
00039 public BocDiagnostics(int p, int c, int r, Sct_SctApi.SctApi a) {
00040 partition = p;
00041 crate = c;
00042 rod = r;
00043 api = a;
00044
00045 initComponents();
00046 modifyComponents();
00047 }
00048
00049 public static void main(String [] args) {
00050 javax.swing.JFrame f = new javax.swing.JFrame("BOC Diag test");
00051
00052 f.getContentPane().add(new BocDiagnostics());
00053 f.pack();
00054 f.setVisible(true);
00055 }
00056
00057 void modifyComponents() {
00058 JTableHeader tableHeader = bocSetupTable.getTableHeader();
00059 tableHeader.setReorderingAllowed(false);
00060 tableHeader.setResizingAllowed(false);
00061
00062 int columnWidth = bocSetupTable.getFontMetrics(bocSetupTable.getFont()).stringWidth("mmmmmm");
00063
00064 bocTableModel.newData(api.currentBOCSetup(partition, crate, rod));
00065 refreshRegisterFields();
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 }
00079
00085 private void initComponents() {
00086 java.awt.GridBagConstraints gridBagConstraints;
00087
00088 jPanel2 = new javax.swing.JPanel();
00089 jLabel3 = new javax.swing.JLabel();
00090 jTextField2 = new javax.swing.JTextField();
00091 jLabel4 = new javax.swing.JLabel();
00092 jTextField3 = new javax.swing.JTextField();
00093 jLabel5 = new javax.swing.JLabel();
00094 jTextField4 = new javax.swing.JTextField();
00095 jLabel7 = new javax.swing.JLabel();
00096 jTextField6 = new javax.swing.JTextField();
00097 jTabbedPane1 = new javax.swing.JTabbedPane();
00098 jPanel3 = new javax.swing.JPanel();
00099 jScrollPane1 = new javax.swing.JScrollPane();
00100 bocSetupTable = new javax.swing.JTable();
00101 jButton1 = new javax.swing.JButton();
00102 jButton2 = new javax.swing.JButton();
00103 jPanel5 = new javax.swing.JPanel();
00104 jPanel6 = new javax.swing.JPanel();
00105 refreshButton = new javax.swing.JButton();
00106 jPanel1 = new javax.swing.JPanel();
00107 jLabel1 = new javax.swing.JLabel();
00108 clkCText = new javax.swing.JTextField();
00109 jLabel2 = new javax.swing.JLabel();
00110 rxDataText = new javax.swing.JTextField();
00111 jLabel6 = new javax.swing.JLabel();
00112 rxDacText = new javax.swing.JTextField();
00113 jLabel8 = new javax.swing.JLabel();
00114 txDacText = new javax.swing.JTextField();
00115 jLabel9 = new javax.swing.JLabel();
00116 vFineText = new javax.swing.JTextField();
00117 jLabel10 = new javax.swing.JLabel();
00118 vClock0Text = new javax.swing.JTextField();
00119 jLabel11 = new javax.swing.JLabel();
00120 vClock1Text = new javax.swing.JTextField();
00121 jLabel12 = new javax.swing.JLabel();
00122 bpmPhaseText = new javax.swing.JTextField();
00123 jLabel13 = new javax.swing.JLabel();
00124 bregPhaseText = new javax.swing.JTextField();
00125
00126 setLayout(new java.awt.BorderLayout());
00127
00128 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
00129
00130 jLabel3.setText("Partition");
00131 jPanel2.add(jLabel3);
00132
00133 jTextField2.setEditable(false);
00134 jTextField2.setText(new Integer(getPartition()).toString());
00135 jPanel2.add(jTextField2);
00136
00137 jLabel4.setText("Crate");
00138 jPanel2.add(jLabel4);
00139
00140 jTextField3.setEditable(false);
00141 jTextField3.setText(new Integer(getCrate()).toString());
00142 jPanel2.add(jTextField3);
00143
00144 jLabel5.setText("BOC");
00145 jPanel2.add(jLabel5);
00146
00147 jTextField4.setEditable(false);
00148 jTextField4.setText(new Integer(getROD()).toString());
00149 jPanel2.add(jTextField4);
00150
00151 jLabel7.setText("Slot");
00152 jPanel2.add(jLabel7);
00153
00154 jTextField6.setEditable(false);
00155 jTextField6.setText(getRODSlot());
00156 jPanel2.add(jTextField6);
00157
00158 add(jPanel2, java.awt.BorderLayout.NORTH);
00159
00160 jPanel3.setLayout(new java.awt.GridBagLayout());
00161
00162 bocSetupTable.setFont(new java.awt.Font("Monospaced", 0, 10));
00163 bocSetupTable.setModel(getBocSetupTableModel());
00164 bocSetupTable.setShowHorizontalLines(false);
00165 bocSetupTable.setShowVerticalLines(false);
00166 jScrollPane1.setViewportView(bocSetupTable);
00167
00168 gridBagConstraints = new java.awt.GridBagConstraints();
00169 gridBagConstraints.gridy = 2;
00170 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
00171 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00172 gridBagConstraints.weightx = 1.0;
00173 gridBagConstraints.weighty = 1.0;
00174 jPanel3.add(jScrollPane1, gridBagConstraints);
00175
00176 jButton1.setText("Refresh");
00177 jButton1.addActionListener(new java.awt.event.ActionListener() {
00178 public void actionPerformed(java.awt.event.ActionEvent evt) {
00179 refreshBocSetupPerformed(evt);
00180 }
00181 });
00182
00183 gridBagConstraints = new java.awt.GridBagConstraints();
00184 gridBagConstraints.gridy = 1;
00185 gridBagConstraints.weightx = 0.1;
00186 jPanel3.add(jButton1, gridBagConstraints);
00187
00188 jButton2.setText("Re-configure");
00189 jButton2.addActionListener(new java.awt.event.ActionListener() {
00190 public void actionPerformed(java.awt.event.ActionEvent evt) {
00191 reconfigureBOCSetupPerformed(evt);
00192 }
00193 });
00194
00195 gridBagConstraints = new java.awt.GridBagConstraints();
00196 gridBagConstraints.gridy = 1;
00197 gridBagConstraints.weightx = 0.1;
00198 jPanel3.add(jButton2, gridBagConstraints);
00199
00200 jTabbedPane1.addTab("Setup", jPanel3);
00201
00202 jPanel5.setLayout(new java.awt.GridBagLayout());
00203
00204 jPanel6.setLayout(new java.awt.GridBagLayout());
00205
00206 refreshButton.setText("Refresh");
00207 refreshButton.addActionListener(new java.awt.event.ActionListener() {
00208 public void actionPerformed(java.awt.event.ActionEvent evt) {
00209 refreshButtonActionPerformed(evt);
00210 }
00211 });
00212
00213 jPanel6.add(refreshButton, new java.awt.GridBagConstraints());
00214
00215 jPanel1.setLayout(new java.awt.GridBagLayout());
00216
00217 jLabel1.setText("Clock control");
00218 gridBagConstraints = new java.awt.GridBagConstraints();
00219 gridBagConstraints.gridy = 0;
00220 jPanel1.add(jLabel1, gridBagConstraints);
00221
00222 clkCText.setEditable(false);
00223 clkCText.setText("jTextField1");
00224 gridBagConstraints = new java.awt.GridBagConstraints();
00225 gridBagConstraints.gridy = 0;
00226 jPanel1.add(clkCText, gridBagConstraints);
00227
00228 jLabel2.setText("RX data mode");
00229 gridBagConstraints = new java.awt.GridBagConstraints();
00230 gridBagConstraints.gridy = 1;
00231 jPanel1.add(jLabel2, gridBagConstraints);
00232
00233 rxDataText.setEditable(false);
00234 rxDataText.setText("jTextField1");
00235 gridBagConstraints = new java.awt.GridBagConstraints();
00236 gridBagConstraints.gridy = 1;
00237 jPanel1.add(rxDataText, gridBagConstraints);
00238
00239 jLabel6.setText("RX DAC clear");
00240 gridBagConstraints = new java.awt.GridBagConstraints();
00241 gridBagConstraints.gridy = 2;
00242 jPanel1.add(jLabel6, gridBagConstraints);
00243
00244 rxDacText.setEditable(false);
00245 rxDacText.setText("jTextField1");
00246 gridBagConstraints = new java.awt.GridBagConstraints();
00247 gridBagConstraints.gridy = 2;
00248 jPanel1.add(rxDacText, gridBagConstraints);
00249
00250 jLabel8.setText("TX DAC clear");
00251 gridBagConstraints = new java.awt.GridBagConstraints();
00252 gridBagConstraints.gridy = 3;
00253 jPanel1.add(jLabel8, gridBagConstraints);
00254
00255 txDacText.setEditable(false);
00256 txDacText.setText("jTextField1");
00257 gridBagConstraints = new java.awt.GridBagConstraints();
00258 gridBagConstraints.gridy = 3;
00259 jPanel1.add(txDacText, gridBagConstraints);
00260
00261 jLabel9.setText("Vernier fine phase");
00262 gridBagConstraints = new java.awt.GridBagConstraints();
00263 gridBagConstraints.gridy = 4;
00264 jPanel1.add(jLabel9, gridBagConstraints);
00265
00266 vFineText.setEditable(false);
00267 vFineText.setText("jTextField1");
00268 gridBagConstraints = new java.awt.GridBagConstraints();
00269 gridBagConstraints.gridy = 4;
00270 jPanel1.add(vFineText, gridBagConstraints);
00271
00272 jLabel10.setText("Vernier clock phase 0");
00273 gridBagConstraints = new java.awt.GridBagConstraints();
00274 gridBagConstraints.gridy = 5;
00275 jPanel1.add(jLabel10, gridBagConstraints);
00276
00277 vClock0Text.setEditable(false);
00278 vClock0Text.setText("jTextField1");
00279 gridBagConstraints = new java.awt.GridBagConstraints();
00280 gridBagConstraints.gridy = 5;
00281 jPanel1.add(vClock0Text, gridBagConstraints);
00282
00283 jLabel11.setText("Vernier clock phase 1");
00284 gridBagConstraints = new java.awt.GridBagConstraints();
00285 gridBagConstraints.gridy = 6;
00286 jPanel1.add(jLabel11, gridBagConstraints);
00287
00288 vClock1Text.setEditable(false);
00289 vClock1Text.setText("jTextField1");
00290 gridBagConstraints = new java.awt.GridBagConstraints();
00291 gridBagConstraints.gridy = 6;
00292 jPanel1.add(vClock1Text, gridBagConstraints);
00293
00294 jLabel12.setText("BPM clock phase");
00295 gridBagConstraints = new java.awt.GridBagConstraints();
00296 gridBagConstraints.gridy = 7;
00297 jPanel1.add(jLabel12, gridBagConstraints);
00298
00299 bpmPhaseText.setEditable(false);
00300 bpmPhaseText.setText("jTextField1");
00301 gridBagConstraints = new java.awt.GridBagConstraints();
00302 gridBagConstraints.gridy = 7;
00303 jPanel1.add(bpmPhaseText, gridBagConstraints);
00304
00305 jLabel13.setText("bReg clock phase");
00306 gridBagConstraints = new java.awt.GridBagConstraints();
00307 gridBagConstraints.gridy = 8;
00308 jPanel1.add(jLabel13, gridBagConstraints);
00309
00310 bregPhaseText.setEditable(false);
00311 bregPhaseText.setText("jTextField1");
00312 gridBagConstraints = new java.awt.GridBagConstraints();
00313 gridBagConstraints.gridy = 8;
00314 jPanel1.add(bregPhaseText, gridBagConstraints);
00315
00316 gridBagConstraints = new java.awt.GridBagConstraints();
00317 gridBagConstraints.gridy = 1;
00318 jPanel6.add(jPanel1, gridBagConstraints);
00319
00320 gridBagConstraints = new java.awt.GridBagConstraints();
00321 gridBagConstraints.gridy = 0;
00322 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00323 gridBagConstraints.weightx = 1.0;
00324 jPanel5.add(jPanel6, gridBagConstraints);
00325
00326 jTabbedPane1.addTab("Global Registers", jPanel5);
00327
00328 add(jTabbedPane1, java.awt.BorderLayout.CENTER);
00329
00330 }
00331
00332 private void reconfigureBOCSetupPerformed(java.awt.event.ActionEvent evt) {
00333 api.configureBOC(partition, crate, rod);
00334 refreshRegisterFields();
00335 }
00336
00337 private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {
00338 refreshRegisterFields();
00339 }
00340
00341 private void refreshBocSetupPerformed(java.awt.event.ActionEvent evt) {
00342 bocTableModel.newData(api.currentBOCSetup(partition, crate, rod));
00343 }
00344
00345 public TableModel getBocSetupTableModel() {
00346 if(bocTableModel == null) {
00347 sctConf.BOCChannelConfig [] nullBlock = new sctConf.BOCChannelConfig[0];
00348
00349 bocTableModel = new BocDiagnostics.BocSetupTableModel(nullBlock);
00350 }
00351
00352 return bocTableModel;
00353 }
00354
00355 public void refreshRegisterFields() {
00356 sctConf.BOCGlobalConfig regs = api.currentBOCRegisters(partition, crate, rod);
00357
00358 clkCText.setText("" + regs.clockControl);
00359 rxDataText.setText("" + regs.rxDataMode);
00360 rxDacText.setText("" + regs.rxDacClear);
00361 txDacText.setText("" + regs.txDacClear);
00362 vFineText.setText("" + regs.vernierFinePhase);
00363 vClock0Text.setText("" + regs.vernierClockPhase0);
00364 vClock1Text.setText("" + regs.vernierClockPhase1);
00365 bpmPhaseText.setText("" + regs.bpmClockPhase);
00366 bregPhaseText.setText("" + regs.bregClockPhase);
00367 }
00368
00369 public int getPartition() {
00370 return partition;
00371 }
00372
00373 public int getCrate() {
00374 return crate;
00375 }
00376
00377 public int getROD() {
00378 return rod;
00379 }
00380
00381 public String getRODSlot() {
00382 try {
00383 long rodSlot = api.getRodSlot(partition, crate, rod);
00384 return "" + rodSlot;
00385 } catch(NullPointerException n) {
00386 return "No API";
00387 }
00388 }
00389
00390 public boolean isRODValid() {
00391 if(api == null) {
00392 if(getTopLevelAncestor() == null) {
00393
00394 return false;
00395 } else {
00396 ((Window)getTopLevelAncestor()).dispose();
00397 return false;
00398 }
00399 } else {
00400 return api.isRODPresent(partition, crate, rod);
00401 }
00402 }
00403
00408 public void setPartition(int partition) { this.partition = partition; }
00409
00410 public class BocSetupTableModel extends javax.swing.table.AbstractTableModel {
00411 sctConf.BOCChannelConfig [] blockArray;
00412
00413 public BocSetupTableModel(sctConf.BOCChannelConfig [] block) {
00414 blockArray = block;
00415 }
00416
00417 public void newData(sctConf.BOCChannelConfig [] block) {
00418 blockArray = block;
00419 fireTableDataChanged();
00420 }
00421
00422 public int getColumnCount() {
00423 return 9;
00424 }
00425
00426 public int getRowCount() {
00427 return 48;
00428 }
00429
00430 public Object getValueAt(int rowIndex, int columnIndex) {
00431 sctConf.BOCChannelConfig ch = blockArray[rowIndex];
00432
00433 switch(columnIndex) {
00434 case 0: return "" + rowIndex;
00435 case 1: return "0x" + Integer.toHexString(ch.current);
00436 case 2: return "0x" + Integer.toHexString((ch.delay & 0xff00) >> 8);
00437 case 3: return "0x" + Integer.toHexString(ch.delay & 0xff);
00438 case 4: return "0x" + Integer.toHexString(ch.markSpace);
00439 case 5: return "0x" + Integer.toHexString(ch.threshold0);
00440 case 6: return "0x" + Integer.toHexString(ch.delay0);
00441 case 7: return "0x" + Integer.toHexString(ch.threshold1);
00442 case 8: return "0x" + Integer.toHexString(ch.delay1);
00443 default: return "---";
00444 }
00445 }
00446
00447 public String getColumnName(int columnIndex) {
00448 String retValue;
00449
00450 switch(columnIndex) {
00451 case 0: retValue = "Channel"; break;
00452 case 1: retValue = "Current"; break;
00453 case 2: retValue = "Coarse Delay"; break;
00454 case 3: retValue = "Fine Delay"; break;
00455 case 4: retValue = "Mark/space"; break;
00456 case 5: retValue = "Threshold 0"; break;
00457 case 6: retValue = "RX Delay 0"; break;
00458 case 7: retValue = "Threshold 1"; break;
00459 case 8: retValue = "RX Delay 1"; break;
00460 default: retValue = "Unkown"; break;
00461 }
00462
00463 return retValue;
00464 }
00465 }
00466
00467
00468 private javax.swing.JTable bocSetupTable;
00469 private javax.swing.JTextField bpmPhaseText;
00470 private javax.swing.JTextField bregPhaseText;
00471 private javax.swing.JTextField clkCText;
00472 private javax.swing.JButton jButton1;
00473 private javax.swing.JButton jButton2;
00474 private javax.swing.JLabel jLabel1;
00475 private javax.swing.JLabel jLabel10;
00476 private javax.swing.JLabel jLabel11;
00477 private javax.swing.JLabel jLabel12;
00478 private javax.swing.JLabel jLabel13;
00479 private javax.swing.JLabel jLabel2;
00480 private javax.swing.JLabel jLabel3;
00481 private javax.swing.JLabel jLabel4;
00482 private javax.swing.JLabel jLabel5;
00483 private javax.swing.JLabel jLabel6;
00484 private javax.swing.JLabel jLabel7;
00485 private javax.swing.JLabel jLabel8;
00486 private javax.swing.JLabel jLabel9;
00487 private javax.swing.JPanel jPanel1;
00488 private javax.swing.JPanel jPanel2;
00489 private javax.swing.JPanel jPanel3;
00490 private javax.swing.JPanel jPanel5;
00491 private javax.swing.JPanel jPanel6;
00492 private javax.swing.JScrollPane jScrollPane1;
00493 private javax.swing.JTabbedPane jTabbedPane1;
00494 private javax.swing.JTextField jTextField2;
00495 private javax.swing.JTextField jTextField3;
00496 private javax.swing.JTextField jTextField4;
00497 private javax.swing.JTextField jTextField6;
00498 private javax.swing.JButton refreshButton;
00499 private javax.swing.JTextField rxDacText;
00500 private javax.swing.JTextField rxDataText;
00501 private javax.swing.JTextField txDacText;
00502 private javax.swing.JTextField vClock0Text;
00503 private javax.swing.JTextField vClock1Text;
00504 private javax.swing.JTextField vFineText;
00505
00506
00507 }