📄 diagmsgdisplay.java
字号:
/* * Copyright (c) 2003, Vanderbilt University * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. * * IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */package net.tinyos.mcenter;import net.tinyos.packet.*;/** * * @author nadand */public class DiagMSGDisplay extends MessageCenterInternalFrame implements PacketListenerIF { protected String delimiter = " "; protected java.text.SimpleDateFormat timestamp = null; static final int PACKET_TYPE_FIELD = 2; static final int PACKET_LENGTH_FIELD = 4; static final int PACKET_DATA_FIELD = 5; static final int PACKET_CRC_SIZE = 0; private byte diagActiveMessage = (byte)0xB1; private java.util.prefs.Preferences prefsRoot = java.util.prefs.Preferences.userNodeForPackage(this.getClass()); private java.util.prefs.Preferences prefs; /** Creates new form DiagMSGDisplay */ public DiagMSGDisplay() { super("Diag Message Display"); prefs = prefsRoot.node(prefsRoot.absolutePath()+"/DiagMSGDisplay"); diagActiveMessage = (byte)prefs.getInt("DiagActiveMessage",0xB1); initComponents(); SerialConnector.instance().registerPacketListener(this,diagActiveMessage); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents java.awt.GridBagConstraints gridBagConstraints; jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); subPanel = new javax.swing.JPanel(); timestampCheckBox = new javax.swing.JCheckBox(); jLabel1 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); setTitle("Diag Message Display"); jScrollPane1.setPreferredSize(new java.awt.Dimension(320, 240)); jScrollPane1.setViewportView(jTextArea1); getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); subPanel.setLayout(new java.awt.GridBagLayout()); timestampCheckBox.setText("print timestamp"); timestampCheckBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { timestampCheckBoxItemStateChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.weightx = 1.0; subPanel.add(timestampCheckBox, gridBagConstraints); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel1.setText("msg type"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; subPanel.add(jLabel1, gridBagConstraints); jTextField1.setHorizontalAlignment(javax.swing.JTextField.TRAILING); jTextField1.setText("0XB1"); jTextField1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextField1ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 2.0; subPanel.add(jTextField1, gridBagConstraints); getContentPane().add(subPanel, java.awt.BorderLayout.SOUTH); pack(); }//GEN-END:initComponents private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed String arg = jTextField1.getText(); arg.toUpperCase(); if( !arg.startsWith("0X") ) { jTextField1.setText("0X"+Integer.toHexString(diagActiveMessage)); } else{ SerialConnector.instance().removePacketListener(this,diagActiveMessage); diagActiveMessage = (byte)Integer.parseInt(arg.substring(2), 16); SerialConnector.instance().registerPacketListener(this,diagActiveMessage); prefs.putInt("DiagActiveMessage",diagActiveMessage); } }//GEN-LAST:event_jTextField1ActionPerformed private void timestampCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_timestampCheckBoxItemStateChanged if (evt.getStateChange() == java.awt.event.ItemEvent.SELECTED) { timestamp = new java.text.SimpleDateFormat("HH:mm:ss.SSSS"); } else if(evt.getStateChange() == java.awt.event.ItemEvent.DESELECTED) { timestamp = null; } }//GEN-LAST:event_timestampCheckBoxItemStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField1; private javax.swing.JPanel subPanel; private javax.swing.JCheckBox timestampCheckBox; // End of variables declaration//GEN-END:variables protected String getTimeStamp() { if( timestamp != null ) return timestamp.format(new java.util.Date()) + delimiter; return ""; } /** . */ public void packetReceived(byte[] packet) { if( packet[PACKET_TYPE_FIELD] == diagActiveMessage ) { try { jTextArea1.append(getTimeStamp() + decode(packet)+ "\n"); jTextArea1.setCaretPosition(this.jTextArea1.getDocument().getLength()); } catch(DiagMsgException e) { System.out.println(e.getMessage()); } } } static protected class DiagMsgException extends Exception { public DiagMsgException(String cause) { super(cause); } } protected byte[] packet; protected int end; protected int head; protected StringBuffer line; protected synchronized String decode(byte[] packet) throws DiagMsgException { this.packet = packet; head = PACKET_DATA_FIELD; end = PACKET_DATA_FIELD + packet[PACKET_LENGTH_FIELD]; if( end < head || end > packet.length - PACKET_CRC_SIZE ) throw new DiagMsgException("illegal message length"); line = new StringBuffer(); while(head < end) { byte code = getByte(); addSimple(code & 0xF); addSimple((code >> 4) & 0xF); } // delete the leading space if( line.length() > 0 && line.substring(0, delimiter.length()).equals(delimiter) ) line.delete(0, delimiter.length()); return new String(line); } static final int TYPE_END = 0; static final int TYPE_INT8 = 1; static final int TYPE_UINT8 = 2; static final int TYPE_HEX8 = 3; static final int TYPE_INT16 = 4; static final int TYPE_UINT16 = 5; static final int TYPE_HEX16 = 6; static final int TYPE_INT32 = 7; static final int TYPE_UINT32 = 8; static final int TYPE_HEX32 = 9; static final int TYPE_FLOAT = 10; static final int TYPE_CHAR = 11; static final int TYPE_INT64 = 12; static final int TYPE_UINT64 = 13; static final int TYPE_TOKEN = 14; static final int TYPE_ARRAY = 15; protected void addSimple(int type) throws DiagMsgException { switch(type) { case TYPE_END: break; case TYPE_INT8: addInt8(); break; case TYPE_UINT8: addUint8(); break; case TYPE_HEX8: addHex8(); break; case TYPE_INT16: addInt16(); break; case TYPE_UINT16: addUint16(); break; case TYPE_HEX16: addHex16(); break; case TYPE_INT32: addInt32(); break; case TYPE_UINT32: addUint32(); break; case TYPE_HEX32: addHex32(); break; case TYPE_FLOAT: addReal(); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -