com.dalsemi.onewire.container
Class OneWireContainer33

java.lang.Object
  |
  +--com.dalsemi.onewire.container.OneWireContainer
        |
        +--com.dalsemi.onewire.container.OneWireContainer33

public class OneWireContainer33
extends OneWireContainer

1-Wire® container for the '1K-Bit protected 1-Wire EEPROM with SHA-1 Engine' family type 33 (hex), Dallas Semiconductor part number: DS1961S,DS2432.

Features

The memory can also be accessed through the objects that are returned from the getMemoryBanks method.

The following is a list of the MemoryBank instances that are returned:

Example 1

Display some features of isMACValid where owd is an instanceof OneWireContainer33 and bank is an instanceof PagedMemoryBank:
 
  byte[] read_buf  = new byte [bank.getPageLength()];
  byte[] extra_buf = new byte [bank.getExtraInfoLength()];
  byte[] challenge = new byte [8];

  // read a page (use the most verbose and secure method)
  if (bank.hasPageAutoCRC())
  {
     System.out.println("Using device generated CRC");

     if (bank.hasExtraInfo())
     {
        bank.readPageCRC(pg, false, read_buf, 0, extra_buf);

        owd.getChallenge(challenge,0);
        owd.getContainerSecret(secret, 0);
        sernum = owd.getAddress();
        macvalid = owd.isMACValid(bank.getStartPhysicalAddress()+pg*bank.getPageLength(),
                                  sernum,read_buf,extra_buf,challenge,secret);
     }
     else
        bank.readPageCRC(pg, false, read_buf, 0);
  }
  else
  {
     if (bank.hasExtraInfo())
        bank.readPage(pg, false, read_buf, 0, extra_buf);
     else
        bank.readPage(pg, false, read_buf, 0);
  }
  

DataSheet

http://pdfserv.maxim-ic.com/arpdf/DS2432.pdf

Version:
0.00, 19 Dec 2000
Author:
JPE
See Also:
SHAiButtonUser33

Constructor Summary
OneWireContainer33()
          Default Constructor OneWireContainer33.
OneWireContainer33(DSPortAdapter sourceAdapter, byte[] newAddress)
          Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
OneWireContainer33(DSPortAdapter sourceAdapter, long newAddress)
          Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
OneWireContainer33(DSPortAdapter sourceAdapter, String newAddress)
          Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
 
Method Summary
 boolean bindSecretToiButton(int pageNum, byte[] bindData)
          Binds an installed secret to a DS1961S/DS2432 by using well-known binding data and the DS1961S/DS2432's unique address.
 void computeNextSecret(int pageNum)
          Compute Next Secret using the current contents of data page and scratchpad.
 void computeNextSecret(int pageNum, byte[] partialsecret, int offset)
          Compute Next Secret
 boolean copyScratchpad(int targetPage, int targetPageOffset)
          Copy all 8 bytes of the Sratch Pad to a certain page and offset in memory.
 boolean copyScratchpad(int targetPage, int targetPageOffset, byte[] copy_auth, int authStart)
          Copy all 8 bytes of the Sratch Pad to a certain page and offset in memory.
 String getAlternateNames()
          Retrieve the alternate Dallas Semiconductor part numbers or names.
 void getChallenge(byte[] get, int offset)
          Get the challenge of this device as an array of bytes.
 void getContainerSecret(byte[] secretBuf, int offset)
          Get the secret of this device as an array of bytes.
 String getDescription()
          Retrieve a short description of the function of the iButton type.
 int getMaxSpeed()
          Returns the maximum speed this iButton can communicate at.
 MemoryBankSHAEE getMemoryBankForPage(int page)
          Returns the instance of the memory bank for a particular page
 Enumeration getMemoryBanks()
          Get an enumeration of memory bank instances that implement one or more of the following interfaces: MemoryBank, PagedMemoryBank, and OTPMemoryBank.
 String getName()
          Retrieve the Dallas Semiconductor part number of the iButton as a string.
 MemoryBankScratchSHAEE getScratchpadMemoryBank()
          Returns the instance of the Scratchpad memory bank.
 MemoryBankSHAEE getStatusPageMemoryBank()
          Returns the instance of the Status page memory bank.
 boolean installMasterSecret(int page, byte[] newSecret)
          Installs a secret on a DS1961S/DS2432.
 boolean isContainerSecretSet()
          Get the current status of the secret.
static boolean isMACValid(int addr, byte[] SerNum, byte[] memory, byte[] mac, byte[] challenge, byte[] secret)
          Authenticates page data given a MAC.
 boolean isPageOneEPROMmode()
          Tells if page one is in EPROM mode.
 boolean isSecretWriteProtected()
          Get the status of the secret, if it is write protected.
 boolean isWriteProtectAllSet()
          Get the status of all the pages, if they are write protected.
 boolean isWriteProtectPageZeroSet()
          Get the status of page zero, if it is write protected.
 boolean loadFirstSecret(byte[] data, int offset)
          Load First Secret
 boolean readAuthenticatedPage(int page, byte[] pagedata, int offset, byte[] computed_mac, int macStart)
          Reads and authenticates a page.
 boolean readMemoryPage(int page, byte[] pageData, int offset)
          Reads a page of memory..
 void readScratchpad(byte[] scratchpad, int offset, byte[] extraInfo)
          Read from the Scratch Pad, which is a max of 8 bytes.
 boolean refreshPage(int page)
          Refreshes all 32 bytes of data on a given page.
 boolean refreshPage(int page, int offset)
          Refreshes a particular 8-byte set of data on a given page.
 void setChallenge(byte[] challengeset, int offset)
          Sets the challenge for the Read Authenticate Page
 void setContainerSecret(byte[] newSecret, int offset)
          Sets the bus master secret for this DS2432.
 void setEPROMModePageOne()
          Sets the EPROM mode for page 1.
 void setupContainer(DSPortAdapter sourceAdapter, byte[] newAddress)
          Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
 void setupContainer(DSPortAdapter sourceAdapter, long newAddress)
          Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
 void setupContainer(DSPortAdapter sourceAdapter, String newAddress)
          Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
 boolean writeDataPage(int targetPage, byte[] pageData)
          Writes a data page to the DS1961S/DS2432.
 boolean writeDataPage(int targetPage, byte[] pageData, int offset)
          Writes a data page to the DS1961S/DS2432.
 void writeProtectAll()
          Write protect pages 0 to 3
 void writeProtectPageZero()
          Write protect page zero only.
 void writeProtectSecret()
          Write protects the secret for the DS2432.
 boolean writeScratchpad(int targetPage, int targetPageOffset, byte[] inputbuffer, int start, int length)
          Writes data to the scratchpad.
 
Methods inherited from class com.dalsemi.onewire.container.OneWireContainer
doSpeed, equals, getAdapter, getAddress, getAddressAsLong, getAddressAsString, hashCode, isAlarming, isPresent, setSpeed, toString
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

OneWireContainer33

public OneWireContainer33()
Default Constructor OneWireContainer33. Must call setupContainer before using.

OneWireContainer33

public OneWireContainer33(DSPortAdapter sourceAdapter,
                          byte[] newAddress)
Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device

OneWireContainer33

public OneWireContainer33(DSPortAdapter sourceAdapter,
                          long newAddress)
Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device

OneWireContainer33

public OneWireContainer33(DSPortAdapter sourceAdapter,
                          String newAddress)
Create a container with a provided adapter object and the address of the iButton or 1-Wire device.
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device
Method Detail

setupContainer

public void setupContainer(DSPortAdapter sourceAdapter,
                           byte[] newAddress)
Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
Overrides:
setupContainer in class OneWireContainer
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device

setupContainer

public void setupContainer(DSPortAdapter sourceAdapter,
                           long newAddress)
Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
Overrides:
setupContainer in class OneWireContainer
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device

setupContainer

public void setupContainer(DSPortAdapter sourceAdapter,
                           String newAddress)
Provide this container the adapter object used to access this device and provide the address of this iButton or 1-Wire device.
Overrides:
setupContainer in class OneWireContainer
Parameters:
sourceAdapter - adapter object required to communicate with this iButton.
newAddress - address of this 1-Wire device

getName

public String getName()
Retrieve the Dallas Semiconductor part number of the iButton as a string. For example 'DS1992'.
Overrides:
getName in class OneWireContainer
Returns:
string represetation of the iButton name.

getAlternateNames

public String getAlternateNames()
Retrieve the alternate Dallas Semiconductor part numbers or names. A 'family' of MicroLAN devices may have more than one part number depending on packaging.
Overrides:
getAlternateNames in class OneWireContainer
Returns:
the alternate names for this iButton or 1-Wire device

getDescription

public String getDescription()
Retrieve a short description of the function of the iButton type.
Overrides:
getDescription in class OneWireContainer
Returns:
string represetation of the function description.

getMaxSpeed

public int getMaxSpeed()
Returns the maximum speed this iButton can communicate at.
Overrides:
getMaxSpeed in class OneWireContainer
Returns:
max. communication speed.

getMemoryBanks

public Enumeration getMemoryBanks()
Get an enumeration of memory bank instances that implement one or more of the following interfaces: MemoryBank, PagedMemoryBank, and OTPMemoryBank.
Overrides:
getMemoryBanks in class OneWireContainer
Returns:
Enumeration of memory banks

getScratchpadMemoryBank

public MemoryBankScratchSHAEE getScratchpadMemoryBank()
Returns the instance of the Scratchpad memory bank. Contains methods for reading/writing the Scratchpad contents. Also, methods for Load First Secret, Compute Next Secret, and Refresh Scratchpad
Returns:
the instance of the Scratchpad memory bank

getStatusPageMemoryBank

public MemoryBankSHAEE getStatusPageMemoryBank()
Returns the instance of the Status page memory bank.
Returns:
the instance of the Status page memory bank

getMemoryBankForPage

public MemoryBankSHAEE getMemoryBankForPage(int page)
Returns the instance of the memory bank for a particular page
Parameters:
page - the page for the requested memory bank;
Returns:
the instance of the memory bank for the specified page

setContainerSecret

public void setContainerSecret(byte[] newSecret,
                               int offset)
Sets the bus master secret for this DS2432.
Parameters:
newSecret - Secret for this DS2432.
offset - index into array to copy the secret from

getContainerSecret

public void getContainerSecret(byte[] secretBuf,
                               int offset)
Get the secret of this device as an array of bytes.
Parameters:
secretBuf - array of bytes for holding the container secret
offset - index into array to copy the secret to

isContainerSecretSet

public boolean isContainerSecretSet()
                             throws OneWireIOException,
                                    OneWireException
Get the current status of the secret.
Returns:
boolean telling if the secret is set
Throws:
OneWireIOException -  
OneWireException -  

isSecretWriteProtected

public boolean isSecretWriteProtected()
                               throws OneWireIOException,
                                      OneWireException
Get the status of the secret, if it is write protected.
Returns:
boolean telling if the secret is write protected.
Throws:
OneWireIOException -  
OneWireException -  

setChallenge

public void setChallenge(byte[] challengeset,
                         int offset)
Sets the challenge for the Read Authenticate Page
Parameters:
challengeset - Challenge for all the memory banks.

getChallenge

public void getChallenge(byte[] get,
                         int offset)
Get the challenge of this device as an array of bytes.
Parameters:
get - array of bytes containing the iButton challenge

isWriteProtectAllSet

public boolean isWriteProtectAllSet()
                             throws OneWireIOException,
                                    OneWireException
Get the status of all the pages, if they are write protected.
Returns:
boolean telling if all the pages are write protected.
Throws:
OneWireIOException -  
OneWireException -  

writeProtectSecret

public void writeProtectSecret()
                        throws OneWireIOException,
                               OneWireException
Write protects the secret for the DS2432.

writeProtectAll

public void writeProtectAll()
                     throws OneWireIOException,
                            OneWireException
Write protect pages 0 to 3

setEPROMModePageOne

public void setEPROMModePageOne()
                         throws OneWireIOException,
                                OneWireException
Sets the EPROM mode for page 1. After setting, Page One can only be written to once.

isPageOneEPROMmode

public boolean isPageOneEPROMmode()
                           throws OneWireIOException,
                                  OneWireException
Tells if page one is in EPROM mode.
Returns:
boolean telling if page one is in EPROM mode.
Throws:
OneWireIOException -  
OneWireException -  

writeProtectPageZero

public void writeProtectPageZero()
                          throws OneWireIOException,
                                 OneWireException
Write protect page zero only.

isWriteProtectPageZeroSet

public boolean isWriteProtectPageZeroSet()
                                  throws OneWireIOException,
                                         OneWireException
Get the status of page zero, if it is write protected.
Returns:
boolean telling if page zero is write protected.
Throws:
OneWireIOException -  
OneWireException -  

computeNextSecret

public void computeNextSecret(int pageNum,
                              byte[] partialsecret,
                              int offset)
                       throws OneWireIOException,
                              OneWireException
Compute Next Secret
Parameters:
addr - address of page to use for the next secret computation.
parialsecret - the data to put into the scrathpad in computing next secret.

computeNextSecret

public void computeNextSecret(int pageNum)
                       throws OneWireIOException,
                              OneWireException
Compute Next Secret using the current contents of data page and scratchpad.
Parameters:
addr - address of page to use for the next secret computation.

loadFirstSecret

public boolean loadFirstSecret(byte[] data,
                               int offset)
                        throws OneWireIOException,
                               OneWireException
Load First Secret
Returns:
boolean saying if first secret was loaded
Throws:
OneWireIOException -  
OneWireException -  

refreshPage

public boolean refreshPage(int page,
                           int offset)
                    throws OneWireException,
                           OneWireIOException
Refreshes a particular 8-byte set of data on a given page. This will correct any weakly-programmed EEPROM bits. This feature is only available on the DS1961S, but is safely ignored on the DS2432. The refresh consists of a Refresh Scratchpad command followed by a Load First Secret to the same offset.
Parameters:
page - the page number that contains the 8-bytes to refresh.
offset - the offset into the page for the 8-bytes to refresh.
Returns:
true if refresh is successful.

refreshPage

public boolean refreshPage(int page)
                    throws OneWireException,
                           OneWireIOException
Refreshes all 32 bytes of data on a given page. This will correct any weakly-programmed EEPROM bits. This feature is only available on the DS1961S, but is safely ignored on the DS2432. The refresh consists of a Refresh Scratchpad command followed by a Load First Secret to the same offset, for all 8-byte offsets on the page.
Parameters:
page - the page number that will be refreshed.
Returns:
true if refresh is successful.

isMACValid

public static boolean isMACValid(int addr,
                                 byte[] SerNum,
                                 byte[] memory,
                                 byte[] mac,
                                 byte[] challenge,
                                 byte[] secret)
Authenticates page data given a MAC.
Parameters:
addr - address of the data to be read
memory - the memory read from the page
mac - the MAC calculated for this function given back as the extra info
challenge - the 3 bytes written to the scratch pad used in calculating the mac

installMasterSecret

public boolean installMasterSecret(int page,
                                   byte[] newSecret)
                            throws OneWireIOException,
                                   OneWireException

Installs a secret on a DS1961S/DS2432. The secret is written in partial phrases of 47 bytes (32 bytes to a memory page, 8 bytes to the scratchpad, 7 bytes are discarded (but included for compatibility with DS193S)) and is cumulative until the entire secret is processed.

On TINI, this method will be slightly faster if the secret's length is divisible by 47. However, since secret key generation is a part of initialization, it is probably not necessary.

Parameters:
page - the page number used to write the partial secrets to
secret - the entire secret, in partial phrases, to be installed
Returns:
true if successful
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter
See Also:
bindSecretToiButton(int,byte[])

bindSecretToiButton

public boolean bindSecretToiButton(int pageNum,
                                   byte[] bindData)
                            throws OneWireIOException,
                                   OneWireException

Binds an installed secret to a DS1961S/DS2432 by using well-known binding data and the DS1961S/DS2432's unique address. This makes the secret unique for this iButton.

Parameters:
page - the page number that has the master secret already installed
bind_data - 32 bytes of binding data used to bind the iButton to the system
Returns:
true if successful
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter
See Also:
installMasterSecret(int,byte[])

writeDataPage

public boolean writeDataPage(int targetPage,
                             byte[] pageData)
                      throws OneWireIOException,
                             OneWireException

Writes a data page to the DS1961S/DS2432.

Parameters:
page_number - page number to write
page_data - page data to write (must be at least 32 bytes long)
Returns:
true if successful, false if the operation failed
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter

writeDataPage

public boolean writeDataPage(int targetPage,
                             byte[] pageData,
                             int offset)
                      throws OneWireIOException,
                             OneWireException

Writes a data page to the DS1961S/DS2432.

Parameters:
page_number - page number to write
page_data - page data to write (must be at least 32 bytes long)
offset - the offset to start copying the 32-bytes of page data.
Returns:
true if successful, false if the operation failed
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter

writeScratchpad

public boolean writeScratchpad(int targetPage,
                               int targetPageOffset,
                               byte[] inputbuffer,
                               int start,
                               int length)
                        throws OneWireIOException,
                               OneWireException

Writes data to the scratchpad. In order to write to a data page using this method, next call readScratchPad(), and then copyScratchPad(). Note that the addresses passed to this method will be the addresses the data is copied to if the copyScratchPad() method is called afterward.

Also note that if too many bytes are written, this method will truncate the data so that only a valid number of bytes will be sent.

Parameters:
targetPage - the page number this data will eventually be copied to
targetPageOffset - the offset on the page to copy this data to
inputbuffer - the data that will be copied into the scratchpad
start - offset into the input buffer for the data to write
length - number of bytes to write
Returns:
true if successful, false on a CRC error
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter

readScratchpad

public void readScratchpad(byte[] scratchpad,
                           int offset,
                           byte[] extraInfo)
                    throws OneWireIOException,
                           OneWireException
Read from the Scratch Pad, which is a max of 8 bytes.
Parameters:
scratchpad - byte array to place read data into length of array is always pageLength.
offset - offset into readBuf to pug data
extraInfo - byte array to put extra info read into (TA1, TA2, e/s byte) Can be 'null' if extra info is not needed.
Throws:
OneWireIOException -  
OneWireException -  

copyScratchpad

public boolean copyScratchpad(int targetPage,
                              int targetPageOffset,
                              byte[] copy_auth,
                              int authStart)
                       throws OneWireIOException,
                              OneWireException
Copy all 8 bytes of the Sratch Pad to a certain page and offset in memory.
Parameters:
targetPage - the page to copy the data to
targetPageOffset - the offset into the page to copy to
copy_auth - byte[] containing write authorization
authStart - the offset into the copy_auth array where the authorization begins.
Throws:
OneWireIOException -  
OneWireException -  

copyScratchpad

public boolean copyScratchpad(int targetPage,
                              int targetPageOffset)
                       throws OneWireIOException,
                              OneWireException
Copy all 8 bytes of the Sratch Pad to a certain page and offset in memory. The container secret must be set so that the container can produce the correct MAC.
Parameters:
targetPage - the page to copy the data to
targetPageOffset - the offset into the page to copy to
Throws:
OneWireIOException -  
OneWireException -  

readMemoryPage

public boolean readMemoryPage(int page,
                              byte[] pageData,
                              int offset)
                       throws OneWireIOException,
                              OneWireException
Reads a page of memory..
Parameters:
page - page number to read packet from
pageData - byte array to place read data into
offset - offset into readBuf to place data
Throws:
OneWireIOException -  
OneWireException -  

readAuthenticatedPage

public boolean readAuthenticatedPage(int page,
                                     byte[] pagedata,
                                     int offset,
                                     byte[] computed_mac,
                                     int macStart)
                              throws OneWireIOException,
                                     OneWireException

Reads and authenticates a page. See readMemoryPage() for a description of page numbers and their contents. This method will also generate a signature for the selected page, used in the authentication of roving (User) iButtons.

Parameters:
pageNum - page number to read and authenticate
pagedata - array for the page data.
offset - offset to copy into the array
computed_mac - array for the MAC returned by the device.
macStart - offset to copy into the mac array
Returns:
true if successful, false if the operation failed while waiting for the DS1963S's output to alternate
Throws:
OneWireIOException - on a 1-Wire communication error such as reading an incorrect CRC from a 1-Wire device. This could be caused by a physical interruption in the 1-Wire Network due to shorts or a newly arriving 1-Wire device issuing a 'presence pulse'.
OneWireException - on a communication or setup error with the 1-Wire adapter


Copyright © 1999-2003 Dallas Semiconductor. All Rights Reserved.