⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 responseapdu.java

📁 这是一个以JAVA编写的程序,本人还没有试过,是一个简单的温度控制系统
💻 JAVA
字号:
/*--------------------------------------------------------------------------- * Copyright (C) 1999,2000 Dallas Semiconductor Corporation, All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of Dallas Semiconductor * shall not be used except as stated in the Dallas Semiconductor * Branding Policy. *--------------------------------------------------------------------------- */// ResponseAPDU.javapackage com.dalsemi.onewire.container;/** * A <code>ResponseAPDU</code> represents an Application Protocol Data Unit (APDU) * received from the smart card in response to a previous <code>CommandAPDU</code>. * A <code>ResponseAPDU</code> consists of an optional body and a mandatory * Status Word (SW). <BR><BR> * * According to ISO 7816-4, a <code>ResponseAPDU</code>  has the following * format: * * <pre> *          DATA   |  STATUS WORD *         [data]  |  SW1     SW2 </pre> * * where * <ul> * <li><code>data</code> is an optional byte array of data received from the smart card. * <li><code>SW1</code>  is the status byte 1 containing command processing status. * <li><code>SW2</code>  is the status byte 2 containing command processing qualifier. * </ul> * *  * <H3> Usage </H3>  * <OL> * <LI> *   <code><pre> *   byte[] buffer = {(byte)0x01, (byte)0x02, (byte)0x90, (byte)0x00}; *   ResponseAPDU rapdu = new ResponseAPDU(buffer); </pre></code> * <LI> *   <code><pre> *   OneWireContainer16 owc16 = new OneWireContainer16(adapter, address); *   byte[] buffer = {(byte)0x90, (byte)0x00, (byte)0x00, (byte)0x00,  *                    (byte)0x01, (byte)0x02, (byte)0x03}; *   CommandAPDU capdu = new CommandAPDU(buffer); *   ResponseAPDU rapdu = owc16.sendAPDU(capdu, runTime); </pre></code> * </OL> * * <H3> Additonal information </H3>  * <DL> * <DD><A HREF="http://www.opencard.org"> http://www.opencard.org</A> * </DL> *  * @see com.dalsemi.onewire.container.CommandAPDU * @see com.dalsemi.onewire.container.OneWireContainer16 *  * @version    0.00, 28 Aug 2000 * @author     YL * */public class ResponseAPDU{   /** byte array containing the entire <code>ResponseAPDU</code> */   protected byte[] apduBuffer = null;   /** length of this <code>ResponseAPDU</code> currently in the        <code>apduBuffer</code> */   protected int apduLength;   /**    * Constructs a new <code>ResponseAPDU</code> with the given buffer     * byte array. The internal <code>apduLength</code> is set to the     * length of the buffer passed.    *    * @param  buffer  the byte array with data for the internal    *                 <code>apduBuffer</code>    *     * @throws RuntimeException thrown when <code>buffer</code> length     *                          < <code>2</code>.    *    * @see    CommandAPDU    */   public ResponseAPDU (byte[] buffer)   {      if (buffer.length < 2)         throw new RuntimeException("invalid ResponseAPDU, "                                    + "length must be at least 2 bytes");      apduLength = buffer.length;      apduBuffer = new byte [apduLength];      System.arraycopy(buffer, 0, apduBuffer, 0, apduLength);   }   // ResponseAPDU   /**    * Gets the data field of this <code>ResponseAPDU</code>.    *    * @return a byte array containing this <code>ResponseAPDU</code> data field    */   public byte[] getData ()   {      if (apduLength > 2)      {         byte[] data = new byte [apduLength - 2];         System.arraycopy(apduBuffer, 0, data, 0, apduLength - 2);         return data;      }      else         return null;   }   // data   /**    * Gets the value of SW1 and SW2 as an integer.    * It is computed as:<BR><BR>    * <code>(((SW1 << 8) & 0xFF00) | (SW2 & 0xFF))</code><BR>    *    * @return    <code>(((SW1 << 8) & 0xFF00) | (SW2 & 0xFF))</code> as an integer    */   public final int getSW ()   {      return (((getSW1() << 8) & 0xFF00) | (getSW2() & 0xFF));   }   // getSW   /**    * Gets the value of SW1.    *    * @return    value of SW1 as a byte    */   public final byte getSW1 ()   {      return apduBuffer [apduLength - 2];   }   // getSW1   /**    * Gets the value of SW2.    *    * @return    value of SW2 as a byte    */   public final byte getSW2 ()   {      return apduBuffer [apduLength - 1];   }   // getSW2   /**    * Gets the byte value at the specified offset in <code>apduBuffer</code>.    *    * @param index   the offset in the <code>apduBuffer</code>    * @return        the value at the given offset,    *                or <code>-1</code> if the offset is invalid    *    * @see #getBytes    * @see #getLength    */   final public byte getByte (int index)   {      if (index >= apduLength)         return (byte)-1;   // read beyond end of ResponseAPDU      return (apduBuffer [index]);   }   // getByte   /**    * Gets a byte array holding this <code>ResponseAPDU</code>     * <code>apduBuffer</code>.    *    * @return  <code>apduBuffer</code> copied into a new array    *    * @see #getByte    * @see #getLength    */   final public byte[] getBytes ()   {      byte[] apdu = new byte [apduLength];      System.arraycopy(apduBuffer, 0, apdu, 0, apduLength);      return apdu;   }   // getBytes   /**    * Gets the length of <code>apduBuffer</code>.    *    * @return  <code>apduLength</code> the length of the     *          <code>apduBuffer</code> currently stored    */   final public int getLength ()   {      return apduLength;   }   // getLength   /**    * Gets a string representation of this <code>ResponseAPDU</code>.    *    * @return a string describing this <code>ResponseAPDU</code>    */   public String toString ()   {      String apduString = "";      if (apduLength > 2)      {         byte[] dataBuffer = new byte [apduLength - 2];         dataBuffer = getData();         apduString += "DATA = ";         for (int i = 0; i < dataBuffer.length; i++)         {            // make hex String representation of byte array            if ((dataBuffer [i] & 0xFF) < 0x10)               apduString += '0';            apduString += Integer.toHexString(( int ) (dataBuffer [i] & 0xFF))                          + " ";         }         apduString += " | ";      }      apduString += "SW1 = ";      if ((getSW1() & 0xFF) < 0x10)         apduString += '0';      apduString += Integer.toHexString(getSW1() & 0xFF);      apduString += ", SW2 = ";      if ((getSW2() & 0xFF) < 0x10)         apduString += '0';      apduString += Integer.toHexString(getSW2() & 0xFF);      return (apduString.toUpperCase());   }   // toString}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -