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

📄 memorybankad.java

📁 这是一个以JAVA编写的程序,本人还没有试过,是一个简单的温度控制系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------------------------------------- * 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. *--------------------------------------------------------------------------- */package com.dalsemi.onewire.container;// importsimport com.dalsemi.onewire.OneWireException;import com.dalsemi.onewire.adapter.*;import com.dalsemi.onewire.utils.CRC16;import com.dalsemi.onewire.container.OneWireContainer;/** * Memory bank class for the DS2450. * *  @version    0.00, 28 Aug 2000 *  @author     DS */class MemoryBankAD   implements PagedMemoryBank{   //--------   //--------Static Final Variables   //--------   /**     * Read Memory Command     */   public static final byte READ_MEMORY_COMMAND = ( byte ) 0xAA;   /**     * Write Memory Command     */   public static final byte WRITE_MEMORY_COMMAND = ( byte ) 0x55;   /**     * Page length     */   public static final int PAGE_LENGTH = 8;   //--------   //-------- Variables   //--------   /**    * Reference to the OneWireContainer this bank resides on.    */   protected OneWireContainer ib;   /**    * block of 0xFF's used for faster read pre-fill of 1-Wire blocks    */   protected byte[] ffBlock;   /**    * Flag if read back verification is enabled in 'write()'.    */   protected boolean writeVerification;   /**    * Flag to indicate that speed needs to be set    */   protected boolean doSetSpeed;   //--------   //-------- Protected Variables for MemoryBank implementation    //--------   /**    * Memory bank descriptions    */   protected String bankDescription;   /**    * Memory bank usage flags    */   protected boolean generalPurposeMemory;   /**    * Flag if memory bank is read/write    */   protected boolean readWrite;   /**    * Flag if memory bank is write once (EPROM)    */   protected boolean writeOnce;   /**    * Flag if memory bank is read only    */   protected boolean readOnly;   /**    * Flag if memory bank is non volatile    * (will not erase when power removed)    */   protected boolean nonVolatile;   /**    * Starting physical address in memory bank.  Needed for different    * types of memory in the same logical memory bank.  This can be    * used to seperate them into two virtual memory banks.  Example:    * DS2406 status page has mixed EPROM and Volatile RAM.    */   protected int startPhysicalAddress;   //--------   //-------- Constructor   //--------   /**    * Memory bank contstuctor.  Requires reference to the OneWireContainer    * this memory bank resides on.    */   public MemoryBankAD (OneWireContainer ibutton)   {      // keep reference to ibutton where memory bank is      ib = ibutton;      // create the ffblock (used for faster 0xFF fills)      ffBlock = new byte [50];      for (int i = 0; i < 50; i++)         ffBlock [i] = ( byte ) 0xFF;      // defaults for Page0 of DS2450      bankDescription      = "A/D Conversion read-out";      generalPurposeMemory = false;      startPhysicalAddress = 0;      readWrite            = false;      writeOnce            = false;      readOnly             = true;      nonVolatile          = false;      writeVerification    = true;      // indicate speed has not been set      doSetSpeed = true;   }   //--------   //-------- Memory Bank methods   //--------   /**    * Query to see get a string description of the current memory bank.    *    * @return  String containing the memory bank description    */   public String getBankDescription ()   {      return bankDescription;   }   /**    * Query to see if the current memory bank is general purpose    * user memory.  If it is NOT then it is Memory-Mapped and writing    * values to this memory will affect the behavior of the 1-Wire    * device.    *    * @return  'true' if current memory bank is general purpose    */   public boolean isGeneralPurposeMemory ()   {      return generalPurposeMemory;   }   /**    * Query to see if current memory bank is read/write.    *    * @return  'true' if current memory bank is read/write    */   public boolean isReadWrite ()   {      return readWrite;   }   /**    * Query to see if current memory bank is write write once such    * as with EPROM technology.    *    * @return  'true' if current memory bank can only be written once    */   public boolean isWriteOnce ()   {      return writeOnce;   }   /**    * Query to see if current memory bank is read only.    *    * @return  'true' if current memory bank can only be read    */   public boolean isReadOnly ()   {      return readOnly;   }   /**    * Query to see if current memory bank non-volatile.  Memory is    * non-volatile if it retains its contents even when removed from    * the 1-Wire network.    *    * @return  'true' if current memory bank non volatile.    */   public boolean isNonVolatile ()   {      return nonVolatile;   }   /**    * Query to see if current memory bank pages need the adapter to    * have a 'ProgramPulse' in order to write to the memory.    *    * @return  'true' if writing to the current memory bank pages    *                 requires a 'ProgramPulse'.    */   public boolean needsProgramPulse ()   {      return false;   }   /**    * Query to see if current memory bank pages need the adapter to    * have a 'PowerDelivery' feature in order to write to the memory.    *    * @return  'true' if writing to the current memory bank pages    *                 requires 'PowerDelivery'.    */   public boolean needsPowerDelivery ()   {      return false;   }   /**    * Query to get the starting physical address of this bank.  Physical    * banks are sometimes sub-divided into logical banks due to changes    * in attributes.    *    * @return  physical starting address of this logical bank.    */   public int getStartPhysicalAddress ()   {      return startPhysicalAddress;   }   /**    * Query to get the memory bank size in bytes.    *    * @return  memory bank size in bytes.    */   public int getSize ()   {      return PAGE_LENGTH;   }   /**    * Set the write verification for the 'write()' method.    *    * @param  doReadVerf   true (default) verify write in 'write'    *                      false, don't verify write (used on    *                      Write-Once bit manipulation)    */   public void setWriteVerification (boolean doReadVerf)   {      writeVerification = doReadVerf;   }   /**    * Query to get the number of pages in current memory bank.    *    * @return  number of pages in current memory bank    */   public int getNumberPages ()   {      return 1;   }   /**    * Query to get  page length in bytes in current memory bank.    *    * @return   page length in bytes in current memory bank    */   public int getPageLength ()   {      return PAGE_LENGTH;   }   /**    * Query to get Maximum data page length in bytes for a packet    * read or written in the current memory bank.  See the 'ReadPagePacket()'    * and 'WritePagePacket()' methods.  This method is only usefull    * if the current memory bank is general purpose memory.    *    * @return  max packet page length in bytes in current memory bank    */   public int getMaxPacketDataLength ()   {      return PAGE_LENGTH - 3;   }   /**    * Query to see if current memory bank pages can be read with    * the contents being verified by a device generated CRC.    * This is used to see if the 'ReadPageCRC()' can be used.    *    * @return  'true' if current memory bank can be read with self    *          generated CRC.    */   public boolean hasPageAutoCRC ()   {      return true;   }   /**    * Query to see if current memory bank pages when read deliver    * extra information outside of the normal data space.  Examples    * of this may be a redirection byte, counter, tamper protection    * bytes, or SHA-1 result.  If this method returns true then the    * methods 'ReadPagePacket()' and 'readPageCRC()' with 'extraInfo'    * parameter can be used.    *    * @return  'true' if reading the current memory bank pages    *                 provides extra information.    *    * @deprecated  As of 1-Wire API 0.01, replaced by {@link #hasExtraInfo()}    */   public boolean haveExtraInfo ()   {      return false;   }   /**    * Checks to see if this memory bank's pages deliver extra     * information outside of the normal data space,  when read.  Examples    * of this may be a redirection byte, counter, tamper protection    * bytes, or SHA-1 result.  If this method returns true then the    * methods with an 'extraInfo' parameter can be used:    * {@link #readPage(int,boolean,byte[],int,byte[]) readPage},    * {@link #readPageCRC(int,boolean,byte[],int,byte[]) readPageCRC}, and    * {@link #readPagePacket(int,boolean,byte[],int,byte[]) readPagePacket}.    *    * @return  <CODE> true </CODE> if reading the this memory bank's     *                 pages provides extra information    *    * @see #readPage(int,boolean,byte[],int,byte[]) readPage(extra)    * @see #readPageCRC(int,boolean,byte[],int,byte[]) readPageCRC(extra)    * @see #readPagePacket(int,boolean,byte[],int,byte[]) readPagePacket(extra)    * @since 1-Wire API 0.01    */   public boolean hasExtraInfo ()   {      return false;   }   /**    * Query to get the length in bytes of extra information that    * is read when read a page in the current memory bank.  See    * 'hasExtraInfo()'.    *    * @return  number of bytes in Extra Information read when reading    *          pages in the current memory bank.    */   public int getExtraInfoLength ()   {      return 0;   }   /**    * Query to get a string description of what is contained in    * the Extra Informationed return when reading pages in the current    * memory bank.  See 'hasExtraInfo()'.    *    * @return string describing extra information.    */   public String getExtraInfoDescription ()   {      return null;   }   //--------   //-------- MemoryBank I/O methods   //--------   /**    * Read  memory in the current bank with no CRC checking (device or    * data). The resulting data from this API may or may not be what is on    * the 1-Wire device.  It is recommends that the data contain some kind    * of checking (CRC) like in the readPagePacket() method or have    * the 1-Wire device provide the CRC as in readPageCRC().  readPageCRC()    * however is not supported on all memory types, see 'hasPageAutoCRC()'.    * If neither is an option then this method could be called more    * then once to at least verify that the same thing is read consistantly.    *    * @param  startAddr     starting physical address    * @param  readContinue  if 'true' then device read is continued without    *                       re-selecting.  This can only be used if the new    *                       read() continious where the last one led off    *                       and it is inside a 'beginExclusive/endExclusive'    *                       block.    * @param  readBuf       byte array to place read data into    * @param  offset        offset into readBuf to place data    * @param  len           length in bytes to read    *    * @throws OneWireIOException    * @throws OneWireException    */   public void read (int startAddr, boolean readContinue, byte[] readBuf,                     int offset, int len)      throws OneWireIOException, OneWireException   {      // check if read exceeds memory      if ((startAddr + len) > PAGE_LENGTH)         throw new OneWireException("Read exceeds memory bank end");      // no regular read memory so must use readPageCRC      int start_pg = startAddr / PAGE_LENGTH;      int end_pg   = ((startAddr + len) / PAGE_LENGTH) - 1;      if (((startAddr + len) % PAGE_LENGTH) > 0)         end_pg++;      byte[] raw_buf = new byte [(end_pg - start_pg + 1) * PAGE_LENGTH];

⌨️ 快捷键说明

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