Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

RodDiagnostics.java

00001 /*
00002  * RodDiagnostics.java
00003  *
00004  * Created on 07 January 2004, 14:12
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 RodDiagnostics extends JPanel implements java.io.Serializable {
00025     BlockTableModel bTableModel;
00026 
00027     int partition;
00028     int crate;
00029     int rod;
00030     Sct_SctApi.SctApi api;
00031     
00033     public RodDiagnostics() {
00034         initComponents();
00035         modifyComponents();
00036     }
00037 
00039     public RodDiagnostics(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("ROD Diag test");
00051         
00052         f.getContentPane().add(new RodDiagnostics());
00053         f.pack();
00054         f.setVisible(true);
00055     }
00056 
00057     
00058     void modifyComponents() {
00059         JTableHeader tableHeader = blockTable.getTableHeader();
00060         tableHeader.setReorderingAllowed(false);
00061         tableHeader.setResizingAllowed(false);
00062 
00063         int columnWidth = blockTable.getFontMetrics(blockTable.getFont()).stringWidth("mmmmmm");
00064         
00065         TableColumn column = null;
00066         for (int i = 0; i < 18; i++) {
00067             column = blockTable.getColumnModel().getColumn(i);
00068             if (i == 17) {
00069                 // The ASCII column at the end
00070                 column.setPreferredWidth(columnWidth * 8);
00071             } else {
00072                 column.setPreferredWidth(columnWidth);
00073                 column.setMaxWidth(columnWidth);
00074                 column.setMinWidth(columnWidth);
00075             }
00076         }
00077 
00078         try {
00079             linkValueText.setText("" + api.testLinkOutRetrieve(partition, crate, rod));
00080         } catch(NullPointerException n) {
00081             linkValueText.setText("0");
00082         }
00083     }
00084     
00090     private void initComponents() {//GEN-BEGIN:initComponents
00091         java.awt.GridBagConstraints gridBagConstraints;
00092 
00093         jPanel2 = new javax.swing.JPanel();
00094         jLabel3 = new javax.swing.JLabel();
00095         jTextField2 = new javax.swing.JTextField();
00096         jLabel4 = new javax.swing.JLabel();
00097         jTextField3 = new javax.swing.JTextField();
00098         jLabel5 = new javax.swing.JLabel();
00099         jTextField4 = new javax.swing.JTextField();
00100         jLabel7 = new javax.swing.JLabel();
00101         jTextField6 = new javax.swing.JTextField();
00102         jPanel3 = new javax.swing.JPanel();
00103         jPanel4 = new javax.swing.JPanel();
00104         jLabel2 = new javax.swing.JLabel();
00105         addressText = new javax.swing.JTextField();
00106         jLabel8 = new javax.swing.JLabel();
00107         readValueText = new javax.swing.JTextField();
00108         jButton1 = new javax.swing.JButton();
00109         jLabel9 = new javax.swing.JLabel();
00110         writeValueText = new javax.swing.JTextField();
00111         jButton2 = new javax.swing.JButton();
00112         jLabel10 = new javax.swing.JLabel();
00113         wordCountText = new javax.swing.JTextField();
00114         jButton3 = new javax.swing.JButton();
00115         jLabel6 = new javax.swing.JLabel();
00116         dspNumberText = new javax.swing.JTextField();
00117         jButton5 = new javax.swing.JButton();
00118         jPanel5 = new javax.swing.JPanel();
00119         currDspLabel = new javax.swing.JLabel();
00120         jLabel11 = new javax.swing.JLabel();
00121         currAddressLabel = new javax.swing.JLabel();
00122         jLabel12 = new javax.swing.JLabel();
00123         currWordCountLabel = new javax.swing.JLabel();
00124         jScrollPane1 = new javax.swing.JScrollPane();
00125         blockTable = new javax.swing.JTable();
00126         jPanel1 = new javax.swing.JPanel();
00127         jLabel1 = new javax.swing.JLabel();
00128         linkValueText = new javax.swing.JTextField();
00129         jButton4 = 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("MDSP Address");
00170         gridBagConstraints = new java.awt.GridBagConstraints();
00171         gridBagConstraints.gridy = 0;
00172         jPanel4.add(jLabel2, gridBagConstraints);
00173 
00174         addressText.setText("0x80000000");
00175         gridBagConstraints = new java.awt.GridBagConstraints();
00176         gridBagConstraints.gridy = 0;
00177         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00178         gridBagConstraints.weightx = 0.2;
00179         jPanel4.add(addressText, gridBagConstraints);
00180 
00181         jLabel8.setText("Read Value");
00182         gridBagConstraints = new java.awt.GridBagConstraints();
00183         gridBagConstraints.gridy = 1;
00184         jPanel4.add(jLabel8, gridBagConstraints);
00185 
00186         readValueText.setEditable(false);
00187         readValueText.setText("0x00000001");
00188         gridBagConstraints = new java.awt.GridBagConstraints();
00189         gridBagConstraints.gridy = 1;
00190         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00191         jPanel4.add(readValueText, gridBagConstraints);
00192 
00193         jButton1.setText("Read single word");
00194         jButton1.setEnabled(isRODValid());
00195         jButton1.addActionListener(new java.awt.event.ActionListener() {
00196             public void actionPerformed(java.awt.event.ActionEvent evt) {
00197                 singleReadActionPerformed(evt);
00198             }
00199         });
00200 
00201         gridBagConstraints = new java.awt.GridBagConstraints();
00202         gridBagConstraints.gridy = 1;
00203         jPanel4.add(jButton1, gridBagConstraints);
00204 
00205         jLabel9.setText("Write value");
00206         gridBagConstraints = new java.awt.GridBagConstraints();
00207         gridBagConstraints.gridy = 2;
00208         jPanel4.add(jLabel9, gridBagConstraints);
00209 
00210         writeValueText.setText("0x00000000");
00211         gridBagConstraints = new java.awt.GridBagConstraints();
00212         gridBagConstraints.gridy = 2;
00213         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00214         jPanel4.add(writeValueText, gridBagConstraints);
00215 
00216         jButton2.setText("Write single word");
00217         jButton2.setEnabled(isRODValid());
00218         jButton2.addActionListener(new java.awt.event.ActionListener() {
00219             public void actionPerformed(java.awt.event.ActionEvent evt) {
00220                 singleWriteActionPerformed(evt);
00221             }
00222         });
00223 
00224         gridBagConstraints = new java.awt.GridBagConstraints();
00225         gridBagConstraints.gridy = 2;
00226         jPanel4.add(jButton2, gridBagConstraints);
00227 
00228         jLabel10.setText("Word count");
00229         gridBagConstraints = new java.awt.GridBagConstraints();
00230         gridBagConstraints.gridy = 3;
00231         jPanel4.add(jLabel10, gridBagConstraints);
00232 
00233         wordCountText.setColumns(7);
00234         wordCountText.setText("128");
00235         gridBagConstraints = new java.awt.GridBagConstraints();
00236         gridBagConstraints.gridy = 3;
00237         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00238         jPanel4.add(wordCountText, gridBagConstraints);
00239 
00240         jButton3.setText("Read MDSP block");
00241         jButton3.setEnabled(isRODValid());
00242         jButton3.addActionListener(new java.awt.event.ActionListener() {
00243             public void actionPerformed(java.awt.event.ActionEvent evt) {
00244                 mdspBlockReadActionPerformed(evt);
00245             }
00246         });
00247 
00248         gridBagConstraints = new java.awt.GridBagConstraints();
00249         gridBagConstraints.gridy = 3;
00250         jPanel4.add(jButton3, gridBagConstraints);
00251 
00252         jLabel6.setText("Slave DSP number");
00253         gridBagConstraints = new java.awt.GridBagConstraints();
00254         gridBagConstraints.gridy = 4;
00255         jPanel4.add(jLabel6, gridBagConstraints);
00256 
00257         dspNumberText.setText("0");
00258         gridBagConstraints = new java.awt.GridBagConstraints();
00259         gridBagConstraints.gridy = 4;
00260         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00261         jPanel4.add(dspNumberText, gridBagConstraints);
00262 
00263         jButton5.setText("Read slave DSP block");
00264         jButton5.setEnabled(isRODValid());
00265         jButton5.addActionListener(new java.awt.event.ActionListener() {
00266             public void actionPerformed(java.awt.event.ActionEvent evt) {
00267                 slaveBlockReadActionPerformed(evt);
00268             }
00269         });
00270 
00271         gridBagConstraints = new java.awt.GridBagConstraints();
00272         gridBagConstraints.gridy = 4;
00273         gridBagConstraints.gridwidth = 2;
00274         jPanel4.add(jButton5, gridBagConstraints);
00275 
00276         gridBagConstraints = new java.awt.GridBagConstraints();
00277         gridBagConstraints.gridy = 0;
00278         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00279         gridBagConstraints.weightx = 1.0;
00280         jPanel3.add(jPanel4, gridBagConstraints);
00281 
00282         currDspLabel.setText("no data");
00283         jPanel5.add(currDspLabel);
00284 
00285         jLabel11.setText("Address");
00286         jPanel5.add(jLabel11);
00287 
00288         currAddressLabel.setText("-");
00289         jPanel5.add(currAddressLabel);
00290 
00291         jLabel12.setText("Words");
00292         jPanel5.add(jLabel12);
00293 
00294         currWordCountLabel.setText("0");
00295         jPanel5.add(currWordCountLabel);
00296 
00297         gridBagConstraints = new java.awt.GridBagConstraints();
00298         gridBagConstraints.gridy = 1;
00299         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00300         gridBagConstraints.weightx = 1.0;
00301         jPanel3.add(jPanel5, gridBagConstraints);
00302 
00303         blockTable.setFont(new java.awt.Font("Monospaced", 0, 10));
00304         blockTable.setModel(getBlockTableModel());
00305         blockTable.setShowHorizontalLines(false);
00306         blockTable.setShowVerticalLines(false);
00307         jScrollPane1.setViewportView(blockTable);
00308 
00309         gridBagConstraints = new java.awt.GridBagConstraints();
00310         gridBagConstraints.gridy = 2;
00311         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00312         gridBagConstraints.weightx = 1.0;
00313         gridBagConstraints.weighty = 1.0;
00314         jPanel3.add(jScrollPane1, gridBagConstraints);
00315 
00316         add(jPanel3, java.awt.BorderLayout.CENTER);
00317 
00318         jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
00319 
00320         jPanel1.setOpaque(false);
00321         jLabel1.setText("Link to front panel");
00322         jPanel1.add(jLabel1);
00323 
00324         linkValueText.setText("0");
00325         jPanel1.add(linkValueText);
00326 
00327         jButton4.setText("Set");
00328         jButton4.addActionListener(new java.awt.event.ActionListener() {
00329             public void actionPerformed(java.awt.event.ActionEvent evt) {
00330                 setLinkToFrontPanelPerformed(evt);
00331             }
00332         });
00333 
00334         jPanel1.add(jButton4);
00335 
00336         add(jPanel1, java.awt.BorderLayout.SOUTH);
00337 
00338     }//GEN-END:initComponents
00339 
00340     private void slaveBlockReadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_slaveBlockReadActionPerformed
00341         int address = Long.decode(addressText.getText()).intValue();
00342         int wordCount = Long.decode(wordCountText.getText()).intValue();
00343         int dspNumber = Long.decode(dspNumberText.getText()).intValue();
00344 
00345         int [] blockData; 
00346         
00347         if(api == null) {
00348             int [] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
00349             blockData = data;
00350         } else {
00351             blockData = api.dspBlockRead(partition, crate, rod, address, wordCount, dspNumber);
00352         }
00353         bTableModel.newData(blockData);
00354         currDspLabel.setText("Slave DSP " + dspNumber);
00355         currAddressLabel.setText("0x" + Integer.toHexString(address));
00356         currWordCountLabel.setText("" + wordCount);
00357     }//GEN-LAST:event_slaveBlockReadActionPerformed
00358 
00359     private void setLinkToFrontPanelPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_setLinkToFrontPanelPerformed
00360         int link = Long.decode(linkValueText.getText()).intValue();
00361 
00362         api.testLinkOutSelect(partition, crate, rod, link);
00363     }//GEN-LAST:event_setLinkToFrontPanelPerformed
00364 
00365     private void mdspBlockReadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mdspBlockReadActionPerformed
00366         int address = Long.decode(addressText.getText()).intValue();
00367         int wordCount = Long.decode(wordCountText.getText()).intValue();
00368 
00369         int [] blockData; 
00370         
00371         if(api == null) {
00372             int [] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
00373             blockData = data;
00374         } else {
00375             blockData = api.dspBlockRead(partition, crate, rod, address, wordCount, -1);
00376         }
00377         bTableModel.newData(blockData);
00378         currDspLabel.setText("Master DSP");
00379         currAddressLabel.setText("0x" + Integer.toHexString(address));
00380         currWordCountLabel.setText("" + wordCount);
00381     }//GEN-LAST:event_mdspBlockReadActionPerformed
00382 
00383     private void singleWriteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_singleWriteActionPerformed
00384         int address = Long.decode(addressText.getText()).intValue();
00385         int value = Long.decode(writeValueText.getText()).intValue();
00386         api.dspSingleWrite(partition, crate, rod, address, value, -1);
00387     }//GEN-LAST:event_singleWriteActionPerformed
00388 
00389     private void singleReadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_singleReadActionPerformed
00390         int address = Long.decode(addressText.getText()).intValue();
00391         readValueText.setText("0x" + Long.toHexString(api.dspSingleRead(partition, crate, rod, address, -1)));
00392     }//GEN-LAST:event_singleReadActionPerformed
00393 
00394     public TableModel getBlockTableModel() {
00395         if(bTableModel == null) {
00396             int [] nullBlock = {};
00397 
00398             bTableModel = new RodDiagnostics.BlockTableModel(nullBlock);
00399         }
00400 
00401         return bTableModel;
00402     }    
00403     
00404     public int getPartition() {
00405         return partition;
00406     }
00407 
00408     public int getCrate() {
00409         return crate;
00410     }
00411 
00412     public int getROD() {
00413         return rod;
00414     }
00415 
00416     public String getRODSlot() {
00417         try {
00418             long rodSlot = api.getRodSlot(partition, crate, rod);
00419             return "" + rodSlot;
00420         } catch(NullPointerException n) {
00421             return "No API";
00422         }
00423     }
00424 
00425     public boolean isRODValid() {
00426         if(api == null) {
00427             if(getTopLevelAncestor() == null) {
00428                 // Doesn't have an ancestor when its being constructed...
00429                 return false;
00430             } else {
00431                 ((Window)getTopLevelAncestor()).dispose();
00432                 return false;
00433             }
00434         } else {
00435             return api.isRODPresent(partition, crate, rod);
00436         }
00437     }
00438 
00443     public void setPartition(int partition) { this.partition = partition; }
00444     
00445     public class BlockTableModel extends javax.swing.table.AbstractTableModel {
00446         int [] blockArray;
00447 
00448         public BlockTableModel(int [] block) {
00449             blockArray = block;
00450         }
00451 
00452         public void newData(int [] block) {
00453             blockArray = block;
00454             fireTableDataChanged();
00455         }
00456         
00457         public int getColumnCount() {
00458             // 16 + address + ascii version
00459             return 16+2;
00460         }
00461 
00462         public int getRowCount() {
00463             return (blockArray.length+7) / 8;
00464         }
00465 
00466         public Object getValueAt(int rowIndex, int columnIndex) {
00467 /*            System.out.println("r" + rowIndex + ", c" + columnIndex);
00468             System.out.println(" offset " + (rowIndex*8 + columnIndex) + " len " + blockArray.length);
00469 */
00470             if(columnIndex == 0) {
00471                 return Integer.toHexString(rowIndex*32);
00472             } else if(columnIndex == 17) {
00473                 StringBuffer buff = new StringBuffer();
00474                 
00475                 int offset = rowIndex*8;
00476 
00477                 for(int i=0; i<8; i++) {
00478                     if(offset + i >= blockArray.length) {
00479                         break;
00480                     }
00481 
00482                     for(int j=0; j<4; j++) {
00483                         int ascii = (blockArray[offset + i] >> (8*j)) & 0xff;
00484                         if(ascii >= 32 && ascii < 128) {
00485                             buff.append((char)ascii);
00486                         } else {
00487                             buff.append(".");
00488                         }
00489                     }
00490 
00491                     buff.append(" ");
00492                 }
00493                 return buff.toString();
00494             } else {
00495                 columnIndex --;
00496                 if((columnIndex/2) + rowIndex*8 >= blockArray.length) {
00497                     return null;
00498                 } else {
00499                     int value = blockArray[(columnIndex/2) + rowIndex*8];
00500                     String hexString = Integer.toHexString(value);
00501                     if(columnIndex % 2 == 0) {
00502                         if(hexString.length() > 4) {
00503                             hexString = hexString.substring(0, hexString.length()-4);
00504                         } else {
00505                             hexString = "0000";
00506                         }
00507                     } else {
00508                         if(hexString.length() > 4) {
00509                             hexString = hexString.substring(hexString.length()-4);
00510                         } else {
00511                             // Leave it
00512                         }
00513                     }
00514                     return "0000".substring(0, 4-hexString.length()) + hexString; 
00515                 }
00516             }
00517         }
00518         
00519         public String getColumnName(int columnIndex) {
00520             String retValue;
00521             
00522             if(columnIndex == 0) {
00523                 retValue = "";
00524             } else if(columnIndex == 17) {
00525                 retValue = "ASCII";
00526             } else {
00527                 columnIndex--;
00528                 retValue = Integer.toHexString((columnIndex * 2));
00529             }
00530 
00531             return retValue;
00532         }
00533     }
00534     
00535     // Variables declaration - do not modify//GEN-BEGIN:variables
00536     private javax.swing.JTextField addressText;
00537     private javax.swing.JTable blockTable;
00538     private javax.swing.JLabel currAddressLabel;
00539     private javax.swing.JLabel currDspLabel;
00540     private javax.swing.JLabel currWordCountLabel;
00541     private javax.swing.JTextField dspNumberText;
00542     private javax.swing.JButton jButton1;
00543     private javax.swing.JButton jButton2;
00544     private javax.swing.JButton jButton3;
00545     private javax.swing.JButton jButton4;
00546     private javax.swing.JButton jButton5;
00547     private javax.swing.JLabel jLabel1;
00548     private javax.swing.JLabel jLabel10;
00549     private javax.swing.JLabel jLabel11;
00550     private javax.swing.JLabel jLabel12;
00551     private javax.swing.JLabel jLabel2;
00552     private javax.swing.JLabel jLabel3;
00553     private javax.swing.JLabel jLabel4;
00554     private javax.swing.JLabel jLabel5;
00555     private javax.swing.JLabel jLabel6;
00556     private javax.swing.JLabel jLabel7;
00557     private javax.swing.JLabel jLabel8;
00558     private javax.swing.JLabel jLabel9;
00559     private javax.swing.JPanel jPanel1;
00560     private javax.swing.JPanel jPanel2;
00561     private javax.swing.JPanel jPanel3;
00562     private javax.swing.JPanel jPanel4;
00563     private javax.swing.JPanel jPanel5;
00564     private javax.swing.JScrollPane jScrollPane1;
00565     private javax.swing.JTextField jTextField2;
00566     private javax.swing.JTextField jTextField3;
00567     private javax.swing.JTextField jTextField4;
00568     private javax.swing.JTextField jTextField6;
00569     private javax.swing.JTextField linkValueText;
00570     private javax.swing.JTextField readValueText;
00571     private javax.swing.JTextField wordCountText;
00572     private javax.swing.JTextField writeValueText;
00573     // End of variables declaration//GEN-END:variables
00574     
00575 }

Generated on Thu Jul 15 09:55:47 2004 for SCT DAQ/DCS Software - Java by doxygen 1.3.5