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 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
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() {
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 }
00339
00340 private void slaveBlockReadActionPerformed(java.awt.event.ActionEvent evt) {
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 }
00358
00359 private void setLinkToFrontPanelPerformed(java.awt.event.ActionEvent evt) {
00360 int link = Long.decode(linkValueText.getText()).intValue();
00361
00362 api.testLinkOutSelect(partition, crate, rod, link);
00363 }
00364
00365 private void mdspBlockReadActionPerformed(java.awt.event.ActionEvent evt) {
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 }
00382
00383 private void singleWriteActionPerformed(java.awt.event.ActionEvent evt) {
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 }
00388
00389 private void singleReadActionPerformed(java.awt.event.ActionEvent evt) {
00390 int address = Long.decode(addressText.getText()).intValue();
00391 readValueText.setText("0x" + Long.toHexString(api.dspSingleRead(partition, crate, rod, address, -1)));
00392 }
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
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
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
00468
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
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
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
00574
00575 }