Class MemoryBankNVCRCPW

java.lang.Object
com.dalsemi.onewire.container.MemoryBankNVCRCPW
All Implemented Interfaces:
MemoryBank, PagedMemoryBank

public class MemoryBankNVCRCPW extends Object
Memory bank class for the NVRAM with built-in CRC generation and Password protected memory read/write iButtons and 1-Wire Devices. An example of such a devices is the DS1922 Thermochron with 8k or password protected log memory.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
    Memory bank descriptions
    boolean
    Enable Provided Power for some Password checking.
    protected boolean
    Flag if reading a page in memory bank provides optional extra information (counter, tamper protection, SHA-1...)
    protected String
    Extra information description when reading page in memory bank
    protected int
    Length of extra information when reading a page in memory bank
    protected byte[]
    block of 0xFF's used for faster read pre-fill of 1-Wire blocks
    protected boolean
    Memory bank usage flags
    Reference to the OneWireContainer this bank resides on.
    Password Container to access the passwords for the memory bank.
    protected int
    Max data length in page packet in memory bank
    protected boolean
    Flag if memory bank is non volatile (will not erase when power removed)
    protected int
    Number of pages in memory bank
    protected int
    Number of extra verify byte in the read CRC page
    protected boolean
    Flag if memory bank has page auto-CRC generation
    protected int
    page length in memory bank
    protected boolean
    Flag if memory bank needs power delivery to write
    protected boolean
    Flag if memory bank needs program Pulse to write
    static final byte
    Read Memory Command
    static final byte
    Read Memory (with CRC and Password) Command
    static final byte
    Write Scratchpad Command
    protected boolean
    Flag to indicate if read-continue is possible
    protected boolean
    Flag if memory bank is read only
    protected boolean
    Flag if memory bank is read/write
    Scratchpad with Password.
    protected int
    Size of memory bank in bytes
    protected com.dalsemi.onewire.container.ScratchPad
    ScratchPad memory bank
    protected int
    Starting physical address in memory bank.
    protected boolean
    Flag if memory bank is write once (EPROM)
    protected boolean
    Flag if read back verification is enabled in 'write()'.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Memory bank contstuctor.
  • Method Summary

    Modifier and Type
    Method
    Description
    Query to see get a string description of the current memory bank.
    Query to get a string description of what is contained in the Extra Informationed return when reading pages in the current memory bank.
    int
    Query to get the length in bytes of extra information that is read when read a page in the current memory bank.
    int
    Query to get Maximum data page length in bytes for a packet read or written in the current memory bank.
    int
    Query to get the number of pages in current memory bank.
    int
    Query to get page length in bytes in current memory bank.
    int
    Query to get the memory bank size in bytes.
    int
    Query to get the starting physical address of this bank.
    boolean
    Checks to see if this memory bank's pages deliver extra information outside of the normal data space, when read.
    boolean
    Query to see if current memory bank pages can be read with the contents being verified by a device generated CRC.
    boolean
    Query to see if the current memory bank is general purpose user memory.
    boolean
    Query to see if current memory bank non-volatile.
    boolean
    Query to see if current memory bank is read only.
    boolean
    Query to see if current memory bank is read/write.
    boolean
    Query to see if current memory bank is write write once such as with EPROM technology.
    boolean
    Query to see if current memory bank pages need the adapter to have a 'PowerDelivery' feature in order to write to the memory.
    boolean
    Query to see if current memory bank pages need the adapter to have a 'ProgramPulse' in order to write to the memory.
    void
    read(int startAddr, boolean readContinue, byte[] readBuf, int offset, int len)
    Read memory in the current bank with no CRC checking (device or data).
    void
    readPage(int page, boolean readContinue, byte[] readBuf, int offset)
    Read page in the current bank with no CRC checking (device or data).
    void
    readPage(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo)
    Read page with extra information in the current bank with no CRC checking (device or data).
    void
    readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset)
    Read a complete memory page with CRC verification provided by the device.
    void
    readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo)
    Read a complete memory page with CRC verification provided by the device with extra information.
    protected void
    readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo, int extraLength)
    Read a complete memory page with CRC verification provided by the device with extra information.
    int
    readPagePacket(int page, boolean readContinue, byte[] readBuf, int offset)
    Read a Universal Data Packet.
    int
    readPagePacket(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo)
    Read a Universal Data Packet and extra information.
    void
    setWriteVerification(boolean doReadVerf)
    Set the write verification for the 'write()' method.
    void
    write(int startAddr, byte[] writeBuf, int offset, int len)
    Write memory in the current bank.
    void
    writePagePacket(int page, byte[] writeBuf, int offset, int len)
    Write a Universal Data Packet.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • READ_MEMORY_CRC_PW_COMMAND

      public static final byte READ_MEMORY_CRC_PW_COMMAND
      Read Memory (with CRC and Password) Command
      See Also:
    • scratchpadPW

      protected MemoryBankScratchCRCPW scratchpadPW
      Scratchpad with Password. Used as container for password.
    • ibPass

      protected PasswordContainer ibPass
      Password Container to access the passwords for the memory bank.
    • enablePower

      public boolean enablePower
      Enable Provided Power for some Password checking.
    • READ_PAGE_WITH_CRC

      public static final byte READ_PAGE_WITH_CRC
      Write Scratchpad Command
      See Also:
    • readContinuePossible

      protected boolean readContinuePossible
      Flag to indicate if read-continue is possible
    • numVerifyBytes

      protected int numVerifyBytes
      Number of extra verify byte in the read CRC page
    • READ_MEMORY_COMMAND

      public static final byte READ_MEMORY_COMMAND
      Read Memory Command
      See Also:
    • sp

      protected com.dalsemi.onewire.container.ScratchPad sp
      ScratchPad memory bank
    • ib

      protected OneWireContainer ib
      Reference to the OneWireContainer this bank resides on.
    • ffBlock

      protected byte[] ffBlock
      block of 0xFF's used for faster read pre-fill of 1-Wire blocks
    • size

      protected int size
      Size of memory bank in bytes
    • bankDescription

      protected String bankDescription
      Memory bank descriptions
    • generalPurposeMemory

      protected boolean generalPurposeMemory
      Memory bank usage flags
    • readWrite

      protected boolean readWrite
      Flag if memory bank is read/write
    • writeOnce

      protected boolean writeOnce
      Flag if memory bank is write once (EPROM)
    • readOnly

      protected boolean readOnly
      Flag if memory bank is read only
    • nonVolatile

      protected boolean nonVolatile
      Flag if memory bank is non volatile (will not erase when power removed)
    • programPulse

      protected boolean programPulse
      Flag if memory bank needs program Pulse to write
    • powerDelivery

      protected boolean powerDelivery
      Flag if memory bank needs power delivery to write
    • startPhysicalAddress

      protected int startPhysicalAddress
      Starting physical address in memory bank. Needed for different types of memory in the same logical memory bank. This can be used to separate them into two virtual memory banks. Example: DS2406 status page has mixed EPROM and Volatile RAM.
    • writeVerification

      protected boolean writeVerification
      Flag if read back verification is enabled in 'write()'.
    • numberPages

      protected int numberPages
      Number of pages in memory bank
    • pageLength

      protected int pageLength
      page length in memory bank
    • maxPacketDataLength

      protected int maxPacketDataLength
      Max data length in page packet in memory bank
    • pageAutoCRC

      protected boolean pageAutoCRC
      Flag if memory bank has page auto-CRC generation
    • extraInfo

      protected boolean extraInfo
      Flag if reading a page in memory bank provides optional extra information (counter, tamper protection, SHA-1...)
    • extraInfoLength

      protected int extraInfoLength
      Length of extra information when reading a page in memory bank
    • extraInfoDescription

      protected String extraInfoDescription
      Extra information description when reading page in memory bank
  • Constructor Details

    • MemoryBankNVCRCPW

      public MemoryBankNVCRCPW(PasswordContainer ibutton, MemoryBankScratchCRCPW scratch)
      Memory bank contstuctor. Requires reference to the OneWireContainer this memory bank resides on.
  • Method Details

    • readPageCRC

      public void readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo) throws OneWireIOException, OneWireException
      Read a complete memory page with CRC verification provided by the device with extra information. Not supported by all devices. See the method 'hasPageAutoCRC()'. See the method 'hasExtraInfo()' for a description of the optional extra information.
      Specified by:
      readPageCRC in interface PagedMemoryBank
      Parameters:
      page - page number to read
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPagePacket() continuous where the last one stopped and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to put data read. Must have at least 'getMaxPacketDataLength()' elements.
      offset - offset into readBuf to place data
      extraInfo - byte array to put extra info read into
      Throws:
      OneWireIOException
      OneWireException
      See Also:
    • readPageCRC

      protected void readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo, int extraLength) throws OneWireIOException, OneWireException
      Read a complete memory page with CRC verification provided by the device with extra information. Not supported by all devices. If not extra information available then just call with extraLength=0.
      Parameters:
      page - page number to read
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPagePacket() continuous where the last one stopped and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to put data read. Must have at least 'getMaxPacketDataLength()' elements.
      offset - offset into readBuf to place data
      extraInfo - byte array to put extra info read into
      extraLength - length of extra information
      Throws:
      OneWireIOException
      OneWireException
    • read

      public void read(int startAddr, boolean readContinue, byte[] readBuf, int offset, int len) throws OneWireIOException, OneWireException
      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 consistently.
      Specified by:
      read in interface MemoryBank
      Parameters:
      startAddr - starting physical address
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new read() continuous where the last one led off and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to place read data into
      offset - offset into readBuf to place data
      len - length in bytes to read
      Throws:
      OneWireIOException
      OneWireException
    • write

      public void write(int startAddr, byte[] writeBuf, int offset, int len) throws OneWireIOException, OneWireException
      Write memory in the current bank. It is recommended that when writing data that some structure in the data is created to provide error free reading back with read(). Or the method 'writePagePacket()' could be used which automatically wraps the data in a length and CRC. When using on Write-Once devices care must be taken to write into into empty space. If write() is used to write over an unlocked page on a Write-Once device it will fail. If write verification is turned off with the method 'setWriteVerification(false)' then the result will be an 'AND' of the existing data and the new data.
      Specified by:
      write in interface MemoryBank
      Parameters:
      startAddr - starting address
      writeBuf - byte array containing data to write
      offset - offset into writeBuf to get data
      len - length in bytes to write
      Throws:
      OneWireIOException
      OneWireException
    • readPage

      public void readPage(int page, boolean readContinue, byte[] readBuf, int offset) throws OneWireIOException, OneWireException
      Read page 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 consistently.
      Specified by:
      readPage in interface PagedMemoryBank
      Parameters:
      page - page number to read packet from
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPage() continuous where the last one led off and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to place read data into
      offset - offset into readBuf to place data
      Throws:
      OneWireIOException
      OneWireException
    • readPage

      public void readPage(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo) throws OneWireIOException, OneWireException
      Read page with extra information 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 consistently. See the method 'hasExtraInfo()' for a description of the optional extra information some devices have.
      Specified by:
      readPage in interface PagedMemoryBank
      Parameters:
      page - page number to read packet from
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPage() continuous where the last one led off and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to place read data into
      offset - offset into readBuf to place data
      extraInfo - byte array to put extra info read into
      Throws:
      OneWireIOException
      OneWireException
      See Also:
    • readPagePacket

      public int readPagePacket(int page, boolean readContinue, byte[] readBuf, int offset, byte[] extraInfo) throws OneWireIOException, OneWireException
      Read a Universal Data Packet and extra information. See the method 'readPagePacket()' for a description of the packet structure. See the method 'hasExtraInfo()' for a description of the optional extra information some devices have.
      Specified by:
      readPagePacket in interface PagedMemoryBank
      Parameters:
      page - page number to read packet from
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPagePacket() continuous where the last one stopped and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to put data read. Must have at least 'getMaxPacketDataLength()' elements.
      offset - offset into readBuf to place data
      extraInfo - byte array to put extra info read into
      Returns:
      number of data bytes written to readBuf at the offset.
      Throws:
      OneWireIOException
      OneWireException
      See Also:
    • readPageCRC

      public void readPageCRC(int page, boolean readContinue, byte[] readBuf, int offset) throws OneWireIOException, OneWireException
      Read a complete memory page with CRC verification provided by the device. Not supported by all devices. See the method 'hasPageAutoCRC()'.
      Specified by:
      readPageCRC in interface PagedMemoryBank
      Parameters:
      page - page number to read
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPagePacket() continuous where the last one stopped and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to put data read. Must have at least 'getMaxPacketDataLength()' elements.
      offset - offset into readBuf to place data
      Throws:
      OneWireIOException
      OneWireException
      See Also:
    • getBankDescription

      public String getBankDescription()
      Query to see get a string description of the current memory bank.
      Specified by:
      getBankDescription in interface MemoryBank
      Returns:
      String containing the memory bank description
    • isGeneralPurposeMemory

      public boolean isGeneralPurposeMemory()
      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.
      Specified by:
      isGeneralPurposeMemory in interface MemoryBank
      Returns:
      'true' if current memory bank is general purpose
    • isReadWrite

      public boolean isReadWrite()
      Query to see if current memory bank is read/write.
      Specified by:
      isReadWrite in interface MemoryBank
      Returns:
      'true' if current memory bank is read/write
    • isWriteOnce

      public boolean isWriteOnce()
      Query to see if current memory bank is write write once such as with EPROM technology.
      Specified by:
      isWriteOnce in interface MemoryBank
      Returns:
      'true' if current memory bank can only be written once
    • isReadOnly

      public boolean isReadOnly()
      Query to see if current memory bank is read only.
      Specified by:
      isReadOnly in interface MemoryBank
      Returns:
      'true' if current memory bank can only be read
    • isNonVolatile

      public boolean isNonVolatile()
      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.
      Specified by:
      isNonVolatile in interface MemoryBank
      Returns:
      'true' if current memory bank non volatile.
    • needsProgramPulse

      public boolean needsProgramPulse()
      Query to see if current memory bank pages need the adapter to have a 'ProgramPulse' in order to write to the memory.
      Specified by:
      needsProgramPulse in interface MemoryBank
      Returns:
      'true' if writing to the current memory bank pages requires a 'ProgramPulse'.
      See Also:
    • needsPowerDelivery

      public boolean needsPowerDelivery()
      Query to see if current memory bank pages need the adapter to have a 'PowerDelivery' feature in order to write to the memory.
      Specified by:
      needsPowerDelivery in interface MemoryBank
      Returns:
      'true' if writing to the current memory bank pages requires 'PowerDelivery'.
      See Also:
    • getStartPhysicalAddress

      public int getStartPhysicalAddress()
      Query to get the starting physical address of this bank. Physical banks are sometimes sub-divided into logical banks due to changes in attributes.
      Specified by:
      getStartPhysicalAddress in interface MemoryBank
      Returns:
      physical starting address of this logical bank.
    • getSize

      public int getSize()
      Query to get the memory bank size in bytes.
      Specified by:
      getSize in interface MemoryBank
      Returns:
      memory bank size in bytes.
    • setWriteVerification

      public void setWriteVerification(boolean doReadVerf)
      Set the write verification for the 'write()' method.
      Specified by:
      setWriteVerification in interface MemoryBank
      Parameters:
      doReadVerf - true (default) verify write in 'write' false, don't verify write (used on Write-Once bit manipulation)
      See Also:
    • getNumberPages

      public int getNumberPages()
      Query to get the number of pages in current memory bank.
      Specified by:
      getNumberPages in interface PagedMemoryBank
      Returns:
      number of pages in current memory bank
    • getPageLength

      public int getPageLength()
      Query to get page length in bytes in current memory bank.
      Specified by:
      getPageLength in interface PagedMemoryBank
      Returns:
      page length in bytes in current memory bank
    • getMaxPacketDataLength

      public int getMaxPacketDataLength()
      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 useful if the current memory bank is general purpose memory.
      Specified by:
      getMaxPacketDataLength in interface PagedMemoryBank
      Returns:
      max packet page length in bytes in current memory bank
      See Also:
    • hasPageAutoCRC

      public boolean hasPageAutoCRC()
      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.
      Specified by:
      hasPageAutoCRC in interface PagedMemoryBank
      Returns:
      'true' if current memory bank can be read with self generated CRC.
      See Also:
    • hasExtraInfo

      public boolean hasExtraInfo()
      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: readPage, readPageCRC, and readPagePacket.
      Specified by:
      hasExtraInfo in interface PagedMemoryBank
      Returns:
      true if reading the this memory bank's pages provides extra information
      Since:
      1-Wire API 0.01
      See Also:
    • getExtraInfoLength

      public int getExtraInfoLength()
      Query to get the length in bytes of extra information that is read when read a page in the current memory bank. See 'hasExtraInfo()'.
      Specified by:
      getExtraInfoLength in interface PagedMemoryBank
      Returns:
      number of bytes in Extra Information read when reading pages in the current memory bank.
      See Also:
    • getExtraInfoDescription

      public String getExtraInfoDescription()
      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()'.
      Specified by:
      getExtraInfoDescription in interface PagedMemoryBank
      Returns:
      string describing extra information.
      See Also:
    • readPagePacket

      public int readPagePacket(int page, boolean readContinue, byte[] readBuf, int offset) throws OneWireIOException, OneWireException
      Read a Universal Data Packet. The Universal Data Packet always starts on page boundaries but can end anywhere in the page. The structure specifies the length of data bytes not including the length byte and the CRC16 bytes. There is one length byte. The CRC16 is first initialized to the page number. This provides a check to verify the page that was intended is being read. The CRC16 is then calculated over the length and data bytes. The CRC16 is then inverted and stored low byte first followed by the high byte. This is structure is used by this method to verify the data but is not returned, only the data payload is returned.
      Specified by:
      readPagePacket in interface PagedMemoryBank
      Parameters:
      page - page number to read packet from
      readContinue - if 'true' then device read is continued without re-selecting. This can only be used if the new readPagePacket() continuous where the last one stopped and it is inside a 'beginExclusive/endExclusive' block.
      readBuf - byte array to put data read. Must have at least 'getMaxPacketDataLength()' elements.
      offset - offset into readBuf to place data
      Returns:
      number of data bytes read from the device and written to readBuf at the offset.
      Throws:
      OneWireIOException
      OneWireException
      See Also:
    • writePagePacket

      public void writePagePacket(int page, byte[] writeBuf, int offset, int len) throws OneWireIOException, OneWireException
      Write a Universal Data Packet. See the method 'readPagePacket()' for a description of the packet structure.
      Specified by:
      writePagePacket in interface PagedMemoryBank
      Parameters:
      page - page number to write packet to
      writeBuf - data byte array to write
      offset - offset into writeBuf where data to write is
      len - number of bytes to write
      Throws:
      OneWireIOException
      OneWireException
      See Also: