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 import javax.swing.JFileChooser;
00017 import java.io.FileOutputStream;
00018
00019 import java.io.FileNotFoundException;
00020 import java.io.IOException;
00021
00022 import Sct_SctApi.SctApiIPC;
00023
00029 public class RodDiagnostics extends JPanel implements java.io.Serializable {
00030 BlockTableModel bTableModel;
00031
00032 int partition;
00033 int crate;
00034 int rod;
00035 Sct_SctApi.CrateIPC crateApi;
00036
00038 public RodDiagnostics() {
00039 initComponents();
00040 modifyComponents();
00041 }
00042
00044 public RodDiagnostics(int p, int c, int r, Sct_SctApi.SctApiIPC a) {
00045 partition = p;
00046 crate = c;
00047 rod = r;
00048
00049 crateApi = a.getCrateLegacy(partition,crate);
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 f.getContentPane().add(new RodDiagnostics());
00059 f.pack();
00060 f.setVisible(true);
00061 }
00062
00063
00064 void modifyComponents() {
00065 JTableHeader tableHeader = blockTable.getTableHeader();
00066 tableHeader.setReorderingAllowed(false);
00067 tableHeader.setResizingAllowed(false);
00068
00069 int columnWidth = blockTable.getFontMetrics(blockTable.getFont()).stringWidth("mmmmmm");
00070
00071 TableColumn column = null;
00072 for (int i = 0; i < 18; i++) {
00073 column = blockTable.getColumnModel().getColumn(i);
00074 if (i == 17) {
00075
00076 column.setPreferredWidth(columnWidth * 8);
00077 } else {
00078 column.setPreferredWidth(columnWidth);
00079 column.setMaxWidth(columnWidth);
00080 column.setMinWidth(columnWidth);
00081 }
00082 }
00083
00084 try {
00085 linkValueText.setText("" + crateApi.testLinkOutRetrieve(rod));
00086 } catch(NullPointerException n) {
00087 linkValueText.setText("0");
00088 }
00089 }
00090
00096
00097 private void initComponents() {
00098 java.awt.GridBagConstraints gridBagConstraints;
00099
00100 jPanel2 = new javax.swing.JPanel();
00101 jLabel3 = new javax.swing.JLabel();
00102 jTextField2 = new javax.swing.JTextField();
00103 jLabel4 = new javax.swing.JLabel();
00104 jTextField3 = new javax.swing.JTextField();
00105 jLabel5 = new javax.swing.JLabel();
00106 jTextField4 = new javax.swing.JTextField();
00107 jLabel7 = new javax.swing.JLabel();
00108 jTextField6 = new javax.swing.JTextField();
00109 jPanel3 = new javax.swing.JPanel();
00110 jPanel4 = new javax.swing.JPanel();
00111 jLabel2 = new javax.swing.JLabel();
00112 addressText = new javax.swing.JTextField();
00113 jLabel8 = new javax.swing.JLabel();
00114 readValueText = new javax.swing.JTextField();
00115 jButton1 = new javax.swing.JButton();
00116 jLabel9 = new javax.swing.JLabel();
00117 writeValueText = new javax.swing.JTextField();
00118 jButton2 = new javax.swing.JButton();
00119 jLabel10 = new javax.swing.JLabel();
00120 wordCountText = new javax.swing.JTextField();
00121 jButton3 = new javax.swing.JButton();
00122 jLabel6 = new javax.swing.JLabel();
00123 dspNumberText = new javax.swing.JTextField();
00124 jButton5 = new javax.swing.JButton();
00125 jPanel5 = new javax.swing.JPanel();
00126 currDspLabel = new javax.swing.JLabel();
00127 jLabel11 = new javax.swing.JLabel();
00128 currAddressLabel = new javax.swing.JLabel();
00129 jLabel12 = new javax.swing.JLabel();
00130 currWordCountLabel = new javax.swing.JLabel();
00131 writeBufferButton = new javax.swing.JButton();
00132 jScrollPane1 = new javax.swing.JScrollPane();
00133 blockTable = new javax.swing.JTable();
00134 jPanel1 = new javax.swing.JPanel();
00135 jLabel1 = new javax.swing.JLabel();
00136 linkValueText = new javax.swing.JTextField();
00137 jButton4 = new javax.swing.JButton();
00138
00139 setLayout(new java.awt.BorderLayout());
00140
00141 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
00142
00143 jLabel3.setText("Partition");
00144 jPanel2.add(jLabel3);
00145
00146 jTextField2.setEditable(false);
00147 jTextField2.setText(new Integer(getPartition()).toString());
00148 jPanel2.add(jTextField2);
00149
00150 jLabel4.setText("Crate");
00151 jPanel2.add(jLabel4);
00152
00153 jTextField3.setEditable(false);
00154 jTextField3.setText(new Integer(getCrate()).toString());
00155 jPanel2.add(jTextField3);
00156
00157 jLabel5.setText("ROD");
00158 jPanel2.add(jLabel5);
00159
00160 jTextField4.setEditable(false);
00161 jTextField4.setText(new Integer(getROD()).toString());
00162 jPanel2.add(jTextField4);
00163
00164 jLabel7.setText("Slot");
00165 jPanel2.add(jLabel7);
00166
00167 jTextField6.setEditable(false);
00168 jTextField6.setText(getRODSlot());
00169 jPanel2.add(jTextField6);
00170
00171 add(jPanel2, java.awt.BorderLayout.NORTH);
00172
00173 jPanel3.setLayout(new java.awt.GridBagLayout());
00174
00175 jPanel4.setLayout(new java.awt.GridBagLayout());
00176
00177 jLabel2.setText("MDSP Address");
00178 gridBagConstraints = new java.awt.GridBagConstraints();
00179 gridBagConstraints.gridy = 0;
00180 jPanel4.add(jLabel2, gridBagConstraints);
00181
00182 addressText.setText("0x80000000");
00183 gridBagConstraints = new java.awt.GridBagConstraints();
00184 gridBagConstraints.gridy = 0;
00185 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00186 gridBagConstraints.weightx = 0.2;
00187 jPanel4.add(addressText, gridBagConstraints);
00188
00189 jLabel8.setText("Read Value");
00190 gridBagConstraints = new java.awt.GridBagConstraints();
00191 gridBagConstraints.gridy = 1;
00192 jPanel4.add(jLabel8, gridBagConstraints);
00193
00194 readValueText.setEditable(false);
00195 readValueText.setText("0x00000001");
00196 gridBagConstraints = new java.awt.GridBagConstraints();
00197 gridBagConstraints.gridy = 1;
00198 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00199 jPanel4.add(readValueText, gridBagConstraints);
00200
00201 jButton1.setText("Read single word (MDSP)");
00202 jButton1.setEnabled(isRODValid());
00203 jButton1.addActionListener(new java.awt.event.ActionListener() {
00204 public void actionPerformed(java.awt.event.ActionEvent evt) {
00205 singleReadActionPerformed(evt);
00206 }
00207 });
00208
00209 gridBagConstraints = new java.awt.GridBagConstraints();
00210 gridBagConstraints.gridy = 1;
00211 jPanel4.add(jButton1, gridBagConstraints);
00212
00213 jLabel9.setText("Write value");
00214 gridBagConstraints = new java.awt.GridBagConstraints();
00215 gridBagConstraints.gridy = 2;
00216 jPanel4.add(jLabel9, gridBagConstraints);
00217
00218 writeValueText.setText("0x00000000");
00219 gridBagConstraints = new java.awt.GridBagConstraints();
00220 gridBagConstraints.gridy = 2;
00221 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00222 jPanel4.add(writeValueText, gridBagConstraints);
00223
00224 jButton2.setText("Write single word (MDSP)");
00225 jButton2.setEnabled(isRODValid());
00226 jButton2.addActionListener(new java.awt.event.ActionListener() {
00227 public void actionPerformed(java.awt.event.ActionEvent evt) {
00228 singleWriteActionPerformed(evt);
00229 }
00230 });
00231
00232 gridBagConstraints = new java.awt.GridBagConstraints();
00233 gridBagConstraints.gridy = 2;
00234 jPanel4.add(jButton2, gridBagConstraints);
00235
00236 jLabel10.setText("Word count");
00237 gridBagConstraints = new java.awt.GridBagConstraints();
00238 gridBagConstraints.gridy = 3;
00239 jPanel4.add(jLabel10, gridBagConstraints);
00240
00241 wordCountText.setColumns(7);
00242 wordCountText.setText("128");
00243 gridBagConstraints = new java.awt.GridBagConstraints();
00244 gridBagConstraints.gridy = 3;
00245 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00246 jPanel4.add(wordCountText, gridBagConstraints);
00247
00248 jButton3.setText("Read MDSP block");
00249 jButton3.setEnabled(isRODValid());
00250 jButton3.addActionListener(new java.awt.event.ActionListener() {
00251 public void actionPerformed(java.awt.event.ActionEvent evt) {
00252 mdspBlockReadActionPerformed(evt);
00253 }
00254 });
00255
00256 gridBagConstraints = new java.awt.GridBagConstraints();
00257 gridBagConstraints.gridy = 3;
00258 jPanel4.add(jButton3, gridBagConstraints);
00259
00260 jLabel6.setText("Slave DSP number");
00261 gridBagConstraints = new java.awt.GridBagConstraints();
00262 gridBagConstraints.gridy = 4;
00263 jPanel4.add(jLabel6, gridBagConstraints);
00264
00265 dspNumberText.setText("0");
00266 gridBagConstraints = new java.awt.GridBagConstraints();
00267 gridBagConstraints.gridy = 4;
00268 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00269 jPanel4.add(dspNumberText, gridBagConstraints);
00270
00271 jButton5.setText("Read slave DSP block");
00272 jButton5.setEnabled(isRODValid());
00273 jButton5.addActionListener(new java.awt.event.ActionListener() {
00274 public void actionPerformed(java.awt.event.ActionEvent evt) {
00275 slaveBlockReadActionPerformed(evt);
00276 }
00277 });
00278
00279 gridBagConstraints = new java.awt.GridBagConstraints();
00280 gridBagConstraints.gridy = 4;
00281 gridBagConstraints.gridwidth = 2;
00282 jPanel4.add(jButton5, gridBagConstraints);
00283
00284 gridBagConstraints = new java.awt.GridBagConstraints();
00285 gridBagConstraints.gridy = 0;
00286 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
00287 gridBagConstraints.weightx = 1.0;
00288 jPanel3.add(jPanel4, gridBagConstraints);
00289
00290 currDspLabel.setText("no data");
00291 jPanel5.add(currDspLabel);
00292
00293 jLabel11.setText("Address");
00294 jPanel5.add(jLabel11);
00295
00296 currAddressLabel.setText("-");
00297 jPanel5.add(currAddressLabel);
00298
00299 jLabel12.setText("Words");
00300 jPanel5.add(jLabel12);
00301
00302 currWordCountLabel.setText("0");
00303 jPanel5.add(currWordCountLabel);
00304
00305 writeBufferButton.setText("Write buffer to file");
00306 writeBufferButton.addActionListener(new java.awt.event.ActionListener() {
00307 public void actionPerformed(java.awt.event.ActionEvent evt) {
00308 writeBufferActionPerformed(evt);
00309 }
00310 });
00311
00312 jPanel5.add(writeBufferButton);
00313
00314 gridBagConstraints = new java.awt.GridBagConstraints();
00315 gridBagConstraints.gridy = 1;
00316 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00317 gridBagConstraints.weightx = 1.0;
00318 jPanel3.add(jPanel5, gridBagConstraints);
00319
00320 blockTable.setFont(new java.awt.Font("Monospaced", 0, 10));
00321 blockTable.setModel(getBlockTableModel());
00322 blockTable.setShowHorizontalLines(false);
00323 blockTable.setShowVerticalLines(false);
00324 jScrollPane1.setViewportView(blockTable);
00325
00326 gridBagConstraints = new java.awt.GridBagConstraints();
00327 gridBagConstraints.gridy = 2;
00328 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
00329 gridBagConstraints.weightx = 1.0;
00330 gridBagConstraints.weighty = 1.0;
00331 jPanel3.add(jScrollPane1, gridBagConstraints);
00332
00333 add(jPanel3, java.awt.BorderLayout.CENTER);
00334
00335 jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
00336
00337 jPanel1.setOpaque(false);
00338 jLabel1.setText("Link to front panel");
00339 jPanel1.add(jLabel1);
00340
00341 linkValueText.setText("0");
00342 jPanel1.add(linkValueText);
00343
00344 jButton4.setText("Set");
00345 jButton4.addActionListener(new java.awt.event.ActionListener() {
00346 public void actionPerformed(java.awt.event.ActionEvent evt) {
00347 setLinkToFrontPanelPerformed(evt);
00348 }
00349 });
00350
00351 jPanel1.add(jButton4);
00352
00353 add(jPanel1, java.awt.BorderLayout.SOUTH);
00354
00355 }
00356
00357
00358 private void writeBufferActionPerformed(java.awt.event.ActionEvent evt) {
00359 JFileChooser fileChooser = new JFileChooser();
00360
00361 if(fileChooser.showDialog(null, "File to save buffer to") == JFileChooser.APPROVE_OPTION) {
00362 java.io.File file = fileChooser.getSelectedFile();
00363
00364 FileOutputStream fos = null;
00365 try {
00366 fos = new FileOutputStream(file);
00367 } catch(FileNotFoundException e) {
00368 System.out.println("JFileChooser returned invalid file");
00369 return;
00370 }
00371
00372 int length = bTableModel.blockArray.length;
00373 byte bytes[] = new byte[length * 4];
00374 for(int b = 0; b<length; b++) {
00375 bytes[b*4+0] = (byte)((bTableModel.blockArray[b] >> 24) & 0xff);
00376 bytes[b*4+1] = (byte)((bTableModel.blockArray[b] >> 16) & 0xff);
00377 bytes[b*4+2] = (byte)((bTableModel.blockArray[b] >> 8) & 0xff);
00378 bytes[b*4+3] = (byte)((bTableModel.blockArray[b] >> 0) & 0xff);
00379 }
00380 try {
00381 fos.write(bytes);
00382 fos.close();
00383 } catch(IOException e) {
00384 System.out.println("Error writing file: " + file);
00385 }
00386 }
00387 }
00388
00389 private void slaveBlockReadActionPerformed(java.awt.event.ActionEvent evt) {
00390 int address = Long.decode(addressText.getText()).intValue();
00391 int wordCount = Long.decode(wordCountText.getText()).intValue();
00392 int dspNumber = Long.decode(dspNumberText.getText()).intValue();
00393
00394 int [] blockData;
00395
00396 if(crateApi == null) {
00397 int [] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
00398 blockData = data;
00399 } else {
00400 blockData = crateApi.dspBlockRead(rod, address, wordCount, dspNumber);
00401 }
00402 bTableModel.newData(blockData);
00403 currDspLabel.setText("Slave DSP " + dspNumber);
00404 currAddressLabel.setText("0x" + Integer.toHexString(address));
00405 currWordCountLabel.setText("" + wordCount);
00406 }
00407
00408 private void setLinkToFrontPanelPerformed(java.awt.event.ActionEvent evt) {
00409 int link = Long.decode(linkValueText.getText()).intValue();
00410
00411 crateApi.testLinkOutSelect(rod, link);
00412 }
00413
00414 private void mdspBlockReadActionPerformed(java.awt.event.ActionEvent evt) {
00415 int address = Long.decode(addressText.getText()).intValue();
00416 int wordCount = Long.decode(wordCountText.getText()).intValue();
00417
00418 int [] blockData;
00419
00420 if(crateApi == null) {
00421 int [] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
00422 blockData = data;
00423 } else {
00424 blockData = crateApi.dspBlockRead(rod, address, wordCount, -1);
00425 }
00426 bTableModel.newData(blockData);
00427 currDspLabel.setText("Master DSP");
00428 currAddressLabel.setText("0x" + Integer.toHexString(address));
00429 currWordCountLabel.setText("" + wordCount);
00430 }
00431
00432 private void singleWriteActionPerformed(java.awt.event.ActionEvent evt) {
00433 int address = Long.decode(addressText.getText()).intValue();
00434 int value = Long.decode(writeValueText.getText()).intValue();
00435 crateApi.dspSingleWrite(rod, address, value, -1);
00436 }
00437
00438 private void singleReadActionPerformed(java.awt.event.ActionEvent evt) {
00439 int address = Long.decode(addressText.getText()).intValue();
00440 readValueText.setText("0x" + Long.toHexString(crateApi.dspSingleRead(rod, address, -1)));
00441 }
00442
00443 public TableModel getBlockTableModel() {
00444 if(bTableModel == null) {
00445 int [] nullBlock = {};
00446
00447 bTableModel = new RodDiagnostics.BlockTableModel(nullBlock);
00448 }
00449
00450 return bTableModel;
00451 }
00452
00453 public int getPartition() {
00454 return partition;
00455 }
00456
00457 public int getCrate() {
00458 return crate;
00459 }
00460
00461 public int getROD() {
00462 return rod;
00463 }
00464
00465 public String getRODSlot() {
00466 try {
00467 long rodSlot = crateApi.getRodSlot(rod);
00468 return "" + rodSlot;
00469 } catch(NullPointerException n) {
00470 return "No API";
00471 }
00472 }
00473
00474 public boolean isRODValid() {
00475 if(crateApi == null) {
00476 if(getTopLevelAncestor() == null) {
00477
00478 return false;
00479 } else {
00480 ((Window)getTopLevelAncestor()).dispose();
00481 return false;
00482 }
00483 } else {
00484 return crateApi.isRODPresent(rod);
00485 }
00486 }
00487
00492 public void setPartition(int partition) { this.partition = partition; }
00493
00494 public class BlockTableModel extends javax.swing.table.AbstractTableModel {
00495 int [] blockArray;
00496
00497 public BlockTableModel(int [] block) {
00498 blockArray = block;
00499 }
00500
00501 public void newData(int [] block) {
00502 blockArray = block;
00503 fireTableDataChanged();
00504 }
00505
00506 public int getColumnCount() {
00507
00508 return 16+2;
00509 }
00510
00511 public int getRowCount() {
00512 return (blockArray.length+7) / 8;
00513 }
00514
00515 public Object getValueAt(int rowIndex, int columnIndex) {
00516
00517
00518
00519 if(columnIndex == 0) {
00520 return Integer.toHexString(rowIndex*32);
00521 } else if(columnIndex == 17) {
00522 StringBuffer buff = new StringBuffer();
00523
00524 int offset = rowIndex*8;
00525
00526 for(int i=0; i<8; i++) {
00527 if(offset + i >= blockArray.length) {
00528 break;
00529 }
00530
00531 for(int j=0; j<4; j++) {
00532 int ascii = (blockArray[offset + i] >> (8*j)) & 0xff;
00533 if(ascii >= 32 && ascii < 128) {
00534 buff.append((char)ascii);
00535 } else {
00536 buff.append(".");
00537 }
00538 }
00539
00540 buff.append(" ");
00541 }
00542 return buff.toString();
00543 } else {
00544 columnIndex --;
00545 if((columnIndex/2) + rowIndex*8 >= blockArray.length) {
00546 return null;
00547 } else {
00548 int value = blockArray[(columnIndex/2) + rowIndex*8];
00549 String hexString = Integer.toHexString(value);
00550 if(columnIndex % 2 == 0) {
00551 if(hexString.length() > 4) {
00552 hexString = hexString.substring(0, hexString.length()-4);
00553 } else {
00554 hexString = "0000";
00555 }
00556 } else {
00557 if(hexString.length() > 4) {
00558 hexString = hexString.substring(hexString.length()-4);
00559 } else {
00560
00561 }
00562 }
00563 return "0000".substring(0, 4-hexString.length()) + hexString;
00564 }
00565 }
00566 }
00567
00568 public String getColumnName(int columnIndex) {
00569 String retValue;
00570
00571 if(columnIndex == 0) {
00572 retValue = "";
00573 } else if(columnIndex == 17) {
00574 retValue = "ASCII";
00575 } else {
00576 columnIndex--;
00577 retValue = Integer.toHexString((columnIndex * 2));
00578 }
00579
00580 return retValue;
00581 }
00582 }
00583
00584
00585 private javax.swing.JTextField addressText;
00586 private javax.swing.JTable blockTable;
00587 private javax.swing.JLabel currAddressLabel;
00588 private javax.swing.JLabel currDspLabel;
00589 private javax.swing.JLabel currWordCountLabel;
00590 private javax.swing.JTextField dspNumberText;
00591 private javax.swing.JButton jButton1;
00592 private javax.swing.JButton jButton2;
00593 private javax.swing.JButton jButton3;
00594 private javax.swing.JButton jButton4;
00595 private javax.swing.JButton jButton5;
00596 private javax.swing.JButton writeBufferButton;
00597 private javax.swing.JLabel jLabel1;
00598 private javax.swing.JLabel jLabel10;
00599 private javax.swing.JLabel jLabel11;
00600 private javax.swing.JLabel jLabel12;
00601 private javax.swing.JLabel jLabel2;
00602 private javax.swing.JLabel jLabel3;
00603 private javax.swing.JLabel jLabel4;
00604 private javax.swing.JLabel jLabel5;
00605 private javax.swing.JLabel jLabel6;
00606 private javax.swing.JLabel jLabel7;
00607 private javax.swing.JLabel jLabel8;
00608 private javax.swing.JLabel jLabel9;
00609 private javax.swing.JPanel jPanel1;
00610 private javax.swing.JPanel jPanel2;
00611 private javax.swing.JPanel jPanel3;
00612 private javax.swing.JPanel jPanel4;
00613 private javax.swing.JPanel jPanel5;
00614 private javax.swing.JScrollPane jScrollPane1;
00615 private javax.swing.JTextField jTextField2;
00616 private javax.swing.JTextField jTextField3;
00617 private javax.swing.JTextField jTextField4;
00618 private javax.swing.JTextField jTextField6;
00619 private javax.swing.JTextField linkValueText;
00620 private javax.swing.JTextField readValueText;
00621 private javax.swing.JTextField wordCountText;
00622 private javax.swing.JTextField writeValueText;
00623
00624
00625 }