1-Wire(TM) API for Java(TM) Version 0.01p2 Contents * Introduction * Installation * Examples * 1-Wire API Primer * Documentation * TINI * License * Future * Changes Introduction The 1-Wire(TM) API for Java(TM) contains classes and interfaces that enable rapid development of 1-Wire applications in the Java language on a variety of platforms. Current platforms tested are Win32, TINI(TM), Linux, and Solaris. Support for particular 1-Wire device types (including iButtons(TM)) is provided through 'containers'. This kit has 27 different 'container' types. All desktop 1-Wire adapters are supported on the Win32 platform through a native driver. TINI has its own native 1-Wire ports. All other platforms are supported through the DS9097U serial adapter using Java Communications API. The DS9097U serial adapter information can be found on the Dallas Semiconductor web site: http://www.dalsemi.com/datasheets/pdfs/9097u.pdf ALL Java source code for this kit is provided in the 'src' directory. See the 'License' section. Installation Uncompress the kit file into a directory on your development system. The Kit is currently ~5mB. The development system must be able to run the javac compiler. See your JDK (or equivalent) for minimum system requirements. For every platform except TINI, put the OneWireAPI.jar file found in the 'lib' directory of this kit in your classpath or in the 'ext' directory (for JDK 1.2 and later). If you have a previous version of this file, make sure it is replaced or removed. TINI This kit supports firmware version 1.02 of the TINI OS. The application and interface layer are compiled together to produce a 'tini' file. Installation of the application then consists of FTP-ing the file to the TINI system and running it. See the 'TINI' section of this README for details on creating 1-Wire applications on the TINI platform. WIN32 There are two ways to read the 1-Wire network under Win32 (Win95,98,NT,2K): Java Communications API with the DS9097U and native drivers. Java Communications API/DS9097U Install Java Communications API from Sun. Note that this API does NOT come in the JDK or JRE, it must be installed separately. It can be found here: http://java.sun.com/products/javacomm/index.html The DS9097U adapter class in this kit should work with any platform that has the Java Communications API, however only Win32, Linux and Solaris were tested. Native The native drivers for Win32 are the iButton-TMEX Runtime Environment 32-bit drivers. Install the standard drivers from here: http://www.ibutton.com/software/tmex/index.html To connect these native drivers to the Java classes copy the driver 'ibtmjava.dll' from the 'lib' directory of this kit into \system (or \system32 for NT). By default the 1-Wire port will be the one selected during the installation of the iButton-TMEX Runtime Environment and changed with the 'Default 1-Wire Net' application. Linux Install Java Communications API from Sun. Note that this API does NOT come in the JDK or JRE, it must be installed separately. Retrieve the 'Solaris' version from here: http://java.sun.com/products/javacomm/index.html Only the 'comm.jar' file will be used from this kit. The 'native' part of the Java Communications API for the Linux platform is provided by 'rxtx'. Info on rxtx can be found here: http://www.rxtx.org Note: for better serial performance (but more CPU utilization) use the 'setserial' utility to set the latency of the port to low. Here are the command we used in Linux: setserial /dev/ttyS0 autoconfig setserial /dev/ttyS0 uart 16450 setserial /dev/ttyS0 uart 16550 setserial /dev/ttyS0 low_latency To return your port to it's default state: setserial /dev/ttyS0 autoconfig Solaris Install Java Communications API from Sun. Note that this API does NOT come in the JDK or JRE, it must be installed separately. Retrieve the 'Solaris' version from here: http://java.sun.com/products/javacomm/index.html The driver has a default mode on Solaris that forces it into single bit at a time mode. This was done due to a bug in the Java Communications API on Solaris. I believe this is now fixed in the current revision so the following setting in the 'onewire.properties' file will turn it off: onewire.serial.forcebitsonly=false Also the DS2480 (chip in the DS9097U adapter) has the following valid baud rates: 9600, 19200, 57600, 115200. Of these baud rates, the fastest baud rate observed on some Solaris machines is 19200. The maximum baud rate the driver will try is specified by the following flag in the 'onewire.properties' file: onewire.serial.maxbaud=19200 See the 'Default 1-Wire Network' section for details on the location of the 'onewire.properties' file. Examples The following is a list of the provided examples in the /examples directory of this kit and a brief explanation. A more detailed explanation will be found in the individual directories under 'examples' in this kit. Each example has the following support files and directories: * EXAMPLE_NAME.class - compiled example * readme.txt - detailed information on the example * src - sub-directory containing the example source * tini - sub-directory containing a TINI platform 1.02 or later build of the example * run.bat - batch file to run the example using a fixed classpath pointing to the OneWireAPI.jar file in the /lib directory. * build.bat - batch file to rebuild the example using a fixed classpath pointing to the OneWireAPI.jar file in the /lib directory. * tini_build.bat - batch file to rebuild the example for the TINI platform. Note the environment TINI_HOME must be set BEFORE running this batch file. ADContainerDemo Find the first 1-Wire device that implement the ADContainer interface (A/D). It has a simple text/menu that allows most of the A/D features to be explored. FindiButtons- Find all 1-Wire devices (and iButtons) on all Console available 1-Wire adapters. Note that this application is almost identical to the example of the same name in previous 1-Wire kits. ListOW Minimal 1-Wire application to list the devices found on the default 1-Wire Network. OWC16Test Java iButton demo. It has a simple text/menu driven interface that allows applets to be loaded and tested. OWDump Dump the memory contents of all 1-Wire devices (and iButtons) that contain Memory Banks (see 1- Wire Container Documentation for a description of Memory Banks) on the default 1-Wire Network. OWFish 1-Wire File System Shell. Read, write, format and display the file system on a 1-Wire memory device. See the com.dalsemi.onewire.utils.OWFile* classes. OWMemUtil Text/menu driven utility to read and write the memory of virtually all 1-Wire devices and iButtons (see 1-Wire Container Documentation for a description of Memory Banks). OWNetWatch Monitor the arrival and departure of all 1-Wire devices on a complex network utilizing the DS2409 Coupler to create branches. Also starts a thread to read the temperature of any DS1920/DS1820 devices found on the network. OWWatch Monitor the arrival and departure of all 1-Wire devices on a simple 1-Wire Network. This application does not implement sub-branches but has been optimized and is very fast. ReadClock Find and read all 1-Wire devices that implement the ClockContainer interface. ReadDigPot Find and read all 1-Wire devices that implement the PotentiometerContainer interface. ReadSwitch Find and read all 1-Wire devices that implement the SwitchContainer interface. ReadTemp Find and read all 1-Wire devices that implement the TemperatureContainer interface. SetDefault Set the default 1-Wire Network by selecting the adapter/port combination. This will write a 'onewire.properties' file in a platform specific location. SHA DS1963S (SHA iButton) demo that consists of three applications. Two applications to set up a 'co-processor' and 'roving' device and then a 'debit' application to demo a secure monetary transaction. SwitchDemo Get the status and set the latches on any 1- Wire switch. Temperature- Text/menu driven application to read any 1-Wire ContainerDemo device that implements the TemperatureContainer interface. Thermochron DS1921 temperature gathering demo consisting of two applications. One application 'missions' a DS1921 to collect data and the other 'dumps' the mission data. 1-Wire API Primer Communication with the 1-Wire Network is through an 'adapter' (com.dalsemi.onewire.adapter.DSPortAdapter class). The static class, 'com.dalsemi.onewire.OneWireAccessProvider' is used to get an adapter class instance. All of the adapters can be enumerated or a particular or the default adapter can be retrieved (enumerateAllAdapters(), getAdapter(), and getDefaultAdapter()). Each adapter may support multiple 'ports' so a 1-Wire Network consists of an adapter/port combination. Here is a brief list of the operations needed to access and use the 1-Wire network 1. Get an adapter instance 2. Get exclusive use of the 1-Wire network 3. Find a 1-Wire device 4. Perform operations through the device's container 5. End exclusive use of the 1-wire network 6. Free the port when ending application Note that '1.' and '6.' are performed only once at the beginning and end of the application. '2.' through '5.' comprise the bulk of the 1-Wire operations and are performed multiple times during the execution of an application. Default 1-Wire Network The default 1-Wire Network is specified with two properties: onewire.adapter.default - the adapter name, for example DS9097U onewire.port.default - the port name, for example COM1 The values for properties are retrieved in the following search order: 1) System.properties (use -D option on java command line) 2) onewire.properties file in current directory 3) onewire.properties file /lib/ (Desktop) or /etc/ (TINI) If these properties cannot be found then a platform dependent "Smart default" is used. For Win32 native it is the iButton-TMEX default 1- Wire Net, for TINI it is TINIExternalAdapter/serial1, and for all other platforms it is DS9097U/(first serial communications port). See the example application 'SetDefault' to set the default 1-Wire Network adapter/port. Access to 1-Wire Network To allow for multi-thread access to the 1-Wire network, a pair of methods are provided in the adapter class to give exclusive access. They are 'beginExclusive()' and 'endExclusive()'. It is recommended that this pair wrap any access to the 1-Wire network. Finding 1-Wire devices (and iButtons) Each 1-Wire device type is identified with a 1 byte 'family code'. This family code is used to provide the appropriate container and can also be used to limit the search of the 1-Wire Network to one or more device types. For example the following code fragment will search for devices with 0x10 family code. Note that 'adapter' is a working instance of DSPortAdapter. // clear any previous search restrictions adapter.setSearchAllDevices(); adapter.targetAllFamilies(); adapter.setSpeed(adapter.SPEED_REGULAR); // target 0x10 family devices adapter.targetFamily(0x10); // enumerate through all the 1-Wire devices found for(Enumeration owd_enum = adapter.getAllDeviceContainers(); owd_enum.hasMoreElements(); ) { OneWireContainer owd = (OneWireContainer)owd_enum.nextElement(); // do something with the container } Note that there are other search methods (findFirstDevice() and findNextDevice()) that do not automatically create a container and may be quicker if speed is essential. Also see these other methods for search options: getAddress(), getDeviceContainer(), excludeFamily(), setSearchOnlyAlarmDevices(), and setNoResetSearch(). 1-Wire Containers As described in the 'Finding 1-Wire Devices' section, each type of 1- Wire device has a 'family code' that indicates its functionality. The adapter uses this family code to provide a 'container' to interface to it. The container (com.dalsemi.onewire.container.OneWireContainer) is then used by the application to manipulate the device. Each container class has the following format OneWireContainerXX where XX is the 'family code'. For example, the DS1920 has a family code of 0x10 so the container to use it is OneWireContainer10. The adapter will automatically provide the correct container. If the family code is unknown then the adapter will provide the super-class generic container. Here is a list of the containers provided in this kit. Device Fa Description Interfaces MemoryBanks Name mi ly DS1990A 01 1-Wire Address DS2401 only DS1991 02 Secure memory DS1425 device DS1994 04 4K NVRAM memory ClockContainer MemoryBank DS2404 and clock, PagedMemoryBank timer, alarms DS2405 05 Single addressable switch DS1993 06 4K NVRAM memory MemoryBank PagedMemoryBank DS1992 08 1K NVRAM memory MemoryBank PagedMemoryBank DS1982 09 1K EPROM memory MemoryBank DS2502 PagedMemoryBankO TPMemoryBank DS1995 0A 16K NVRAM MemoryBank memory PagedMemoryBank DS1985 0B 16K EPROM MemoryBank DS2505 memory PagedMemoryBank OTPMemoryBank DS1996 0C 64K NVRAM MemoryBank memory PagedMemoryBank DS1986 0F 64K EPROM MemoryBank DS2506 memory PagedMemoryBankO TPMMemoryBank DS1920 10 Temperature and Temperature- DS1820 alarm trips Container DS18S20 DS2406 12 1K EPROM SwitchContainer MemoryBank DS2407 memory, dual PagedMemoryBankO switch TPMemoryBank DS1983 13 4K EPROM memory MemoryBank DS2503 PagedMemoryBank OTPMMemoryBank DS1971 14 256bit EEPROM MemoryBank memory and OTP PagedMemoryBankO register TPMMemoryBank DS1954 16 Java Powered Cryptographic iButton DS1963S 18 4K NVRAM memory MemoryBank and SHA-1 PagedMemoryBank engine DS1963L 1A 4K NVRAM memory MemoryBank with write PagedMemoryBank cycle counters DS2423 1D 4K NVRAM memory MemoryBank with external PagedMemoryBank counters DS2409 1F dual switch, SwitchContainer coupler DS2450 20 quad A/D ADContainer MemoryBank PagedMemoryBank DS1921 21 Thermochron Temperature- MemoryBank temperature Container PagedMemoryBank logger ClockContainer DS1973 23 4K EEPROM MemoryBank memory PagedMemoryBank DS2438 26 Temperature, ClockContainer A/D ADContainer Temperature- Container DS18B20 28 Adjustable Temperature- resolution Container temperature DS2890 2C single channel Potentiometer- digital pot Container DS2760 30 Temperature, ADContainer current, A/D Temperature- Container Types of Containers Memory The base class of all containers 'OneWireContainer' has a method called 'getMemoryBanks()' that returns an enumeration of memory bank instances. A memory bank is a section of memory on a 1- Wire device that has specific properties. For example the 1- Wire Network Address of a device is a read-only bank of 8 bytes. This technique is used to get a handle on the diverse types of memory that comprise 1-Wire devices. There are three interfaces that the memory bank may implement. These interfaces are hierarchical: MemoryBank - basic read/write (getSize(), read(), write()..) PagedMemoryBank (extends MemoryBank) - paged read/write with packets (getNumberPages(), readPage(), writePagePacket()..) OTPMemoryBank (extents PagedMemoryBank) - One-Time-Programmable, usually EPROM (canRedirectPage(), lockPage()) See the examples 'OWDump' and 'OWMemUtil' for applications that utilize memory banks. Any 1-Wire devices that contain memory can also use the 1-Wire File system. The following classes in the com.dalsemi.onewire.utils package can be used just like the Java equivalient: OWFile - Like java.io.File OWFileInputStream - Like java.io.FileInputStream OWFileOutputSTream - Like java.io.FileInputStream OWFileDescriptor - Like java.io.FileDescriptor See the example 'OWFish' to demonstrate using the 1-Wire file system. The specification for the 1-Wire file system can be found in Application Note 114: http://www.dalsemi.com/datasheets/pdfs/app114.pdf Sensor A 1-Wire Sensor is a device that can make a reading or change the state of something physical (such as a DS2406 switch). Typically the operations of 1-Wire Sensors is memory mapped so writing to a particular location causes the state to change. To accommodate this type of architecture and reduce the number of 1- Wire operations that need to take place, a 'read-modify-write' technique is used. Each Sensor interface is derived from a super-interface (com.dalsemi.onewire.container.OneWireSensor) that contain just two methods: readDevice(), writeDevice(). The read returns a byte array and the write takes a byte array. The byte array is the state of the device. The interfaces that extend this interface have 'get' and 'set' methods that manipulate the byte array. So a OneWireSensor operation is: 1. readDevice() 2. 'get' and 'set' methods 3. writeDevice() The following is a list of the interfaces and a brief description. Note that the container list above indicates the interfaces used. ADContainer - A/D sensor ClockContainer - clock SwitchContainer - switch TemperatureContainer - temperature reading sensor PotentiometerContainer - digital potentiometer device Other The most celebrated 'other' device Dallas Semiconductor has is the Java Powered Cryptographic iButton. This is a microprocessor in an iButton package that has a Java Virtual Machine that can run Java applets. These applets typically perform highly secure cryptographic operations. See this web page for more information: http://www.ibutton.com/ibuttons/java.html Documentation See the 'docs' directory for a complete javadoc of the com.dalsemi.onewire package. The examples are not javadoc'ed but individual example directories may contain documentation. All of the Java source in this kit is provided so if the documentation is not clear or is non-existent, look in the source. Dallas Semiconductor's 1-Wire device data sheets can be found by part number here: http://www.dalsemi.com/datasheets/pdfindex.html TINI TINI is a micro-controller with a Java Virtual Machine. See this page for more information. http://www.ibutton.com/TINI/index.html Since its memory resources are limited, only the containers and necessary classes needed for the application are transferred to TINI. The utility 'BuildDependency' is included in the version 1.02 TINI kit to build only the necessary files. The dependency jar used for building 1-Wire applications is provided in /lib/owapi_dependencies_TINI_001.jar. The source to this jar is in /src/owapi_dependencies_TINI_001src.jar. The file that lists the dependencies is in /lib/owapi_dep.txt. See the README's in the example directories and the batch file 'tini_build.bat' for further build information. Detailed documentation on the 'BuildDependency' utility can be found in the TINI distribution. The documentation of the 1-Wire API is the same on the Desktop or TINI. License Dallas Semiconductor has selected the least restrictive license it could find to apply to the Java source code in this kit. It is based almost word for word on the Xfree86 license (http://www.xfree86.org/4.0/LICENSE1.html). It basically says you can do anything you want with this code. If you distribute the source then just leave the license blurb at the top of the source files. That's it. See the license in the 'COPYRIGHT' file and at the top of all of the source files. Future DS1961S/DS2432 container and others. Changes Global: -=============- Problem : The JAVA docs were not complete. Since : 0.00 Description: Solution : Added many more comments, examples and hyper links. -=============- Package: com.dalsemi.onewire Com.dalsemi.onewire.OneWireAccessPrivider (not-TINI) -=============- Problem : "Error" exception generated on Win32 if TMEX native drivers not loaded correctly in enumerateAdapters method. Since : 0.00 Description: Solution : Catch "Error" exception -=============- Com.dalsemi.onewire.OneWireAccessPrivider -=============- Problem : 1-Wire in use exception in getAdapter and getDefaultAdapter methods. Since : 0.00 Description: Get an exception indicating the adapter was in use when calling one of these methods. Solution : Added a blocking call to beginExclusive and then a call to endExclusive in a 'finally' block. -=============- Problem : Could not add user defined adapters. Since : 0.00 Description: Solution : Added check in enumerateAdapters method to look in the onewire.properties file for 'onewire.register.adapter0' to 'onewire.register.adapter15' that indicates a fully qualified class file that is an adapter class to be included in the enumeration. -=============- Package: com.dalsemi.onewire.container com.dalsemi.onewire.container.OneWireConatiner.java, OneWireContainer04.java, OneWireContainer04.java, OneWireConatiner08.java, OneWireConatiner06.java, OneWireConatiner0A.java, OneWireConatiner09.java, OneWireConatiner0C.java, OneWireConatiner0A.java, OneWireConatiner12.java, OneWireConatiner0B.java, OneWireConatiner14.java, OneWireConatiner0C.java, OneWireConatiner1A.java, OneWireConatiner0F.java, OneWireConatiner20.java, OneWireConatiner12.java, OneWireConatiner20.java, OneWireConatiner13.java, OneWireConatiner20.java, OneWireConatiner14.java, OneWireConatiner20.java, OneWireConatiner18.java, OneWireConatiner20.java, OneWireConatiner1A.java, OneWireConatiner20.java, OneWireConatiner1D.java, OneWireConatiner20.java, OneWireConatiner20.java, OneWireConatiner20.java, OneWireConatiner21.java, OneWireConatiner20.java, OneWireConatiner23.java, -=============- Problem : Inconsistant operation of getMemoryBanks method. Since : 0.00 Description: getMemoryBanks returns a MemoryBank for the 1-Wire Address for these containers but not the others even though all devices have a 1- Wire Address. Solution : Removed MemoryBank for the 1-Wire Address in the enumeration returned from getMemoryBanks since this information is redundant with Address methods in OneWireContainer and DSPortAdapter. -=============- com.dalsemi.onewire.container.OneWireContainer04.java -=============- Problem : Throws did not match ClockContainer interface on some method. Since : 0.00 Description: The following methods needed to have, 'throws 'OneWireException' add: getClockAlarm, setClockAlarm, SetClockRunEnable, setClockAlarmEnable. -=============- com.dalsemi.onewire.container.OneWireContainer12.java -=============- Problem : Changing state of one latch would change state of other. Since : 0.00 Description: Solution : Added code in setLatchState and readDevice to only change the state of one latch at a time. -=============- Problem : Could not set the conditional search conditions. Since : 0.00 Description: Solution : Added method setSearchConditions -=============- Problem : Poor performance. Since : 0.00 Description: Speed checking with the adapter method 'doSpeed' was being performed too often. Solution : Added method setSpeedCheck(boolean) to enable or disable speed checking. -=============- Problem : More static final bytes added for easier use. Since : 0.00 Description: Solution : Define constants for easier reading. -=============- com.dalsemi.onewire.container.OneWireContainer16.java -=============- Problem : Missing constructors to be consistent with other OneWireContainers. Since : 0.00 Description: Solution : Added constructors. -=============- Problem : Correct expected run time entries. Since : 0.00 Description: Needed to check to make sure the run time parameter being passed was from 0 to 15. Solution : Created a check to look at the limits of the run time parameter. -=============- com.dalsemi.onewire.container.OneWireContainer1F.java -=============- Problem : If adapter was left in overdrive and then this container's methods were called a communication exception (OneWireIOException) would be thrown indicating device not present Since : 0.00 Description: Speed checking was not implemented. Solution : Added method setSpeedCheck(boolean) to enable or disable speed checking. -=============- com.dalsemi.onewire.container.OneWireContainer1D.java -=============- Problem : getAlternateName doesn't need to be there because it returns and empty string. Since : 0.00 Description: getAlternateName returns an empty string. Solution : Deleted the method in this container. -=============- com.dalsemi.onewire.container.OneWireContainer21.java -=============- Problem : Exceptions listed in throws but never thrown. Since : 0.00 Description: getAlarmStatus method throws OneWireIOException and OneWireException, but does not. Solution : Removed throws statement from the method. -=============- com.dalsemi.onewire.container.OneWireContainer28.java -=============- Problem : Method doTemperatureConvert would not produce good temperature results. Since : 0.00 Description: Solution : Utilized the adapters 'primed' feature with the adapter startPowerDelivery method to make sure the power is delivered immediately after the next communication byte. -=============- com.dalsemi.onewire.container.JibComm.java -=============- Problem : More information for debugging. Since : 0.00 Description: Solution : Created if statements using a static Boolean to change if debug was necessary. -=============- Problem : Correct expected run time entries. Since : 0.00 Description: Needed to check to make sure the run time parameter being passed was from 0 to 15. Solution : Created a check to look at the limits of the run Time parameter. -=============- com.dalsemi.onewire.container.MemoryBankNV.java, com.dalsemi.onewire.container.MemoryBankNVCRC.java -=============- Problem : CRC16 not correct. Since : 0.00 Description: The CRC16 was being computed on the local page number instead of the absolute page number in the device. Solution : Changed CRC16 calculation to use the device absolute page. -=============- com.dalsemi.onewire.container.MemoryBankAppReg.java, com.dalsemi.onewire.container.MemoryBankEPROM.java, com.dalsemi.onewire.container.OTPMemoryBank.java (and all classes that implement these interfaces) -=============- Problem : The isPageRedirected() method didn't match JAVA standard naming convention. Since : 0.00 Description: The method isPageRedirected() was deprecated. Solution : To deprecate isPageRedirected() and make a new method getRedirectedPage(), also changed comments for the method. -=============- Classes that implement PagedMemoryBank Interface. -=============- Problem : The haveExtraInfo() method didn't match with JAVA naming standard. Since : 0.00 Description: The method haveExtraInfo() was deprecated. Solution : Deprecate haveExtraInfo() and make a new method hasExtraInfo(). -=============- com.dalsemi.onewire.container.MemoryBankAppReg.java, com.dalsemi.onewire.container.MemoryBankEE.java, com.dalsemi.onewire.container.MemoryBankEPROM.java, com.dalsemi.onewire.container.MemoryBankNV.java, com.dalsemi.onewire.container.MemoryBankScratch.java -=============- Problem : Offset parameter in writePagePacket method ignored. Since : 0.00 Description: Solution : Use offset -=============- com.dalsemi.onewire.container.SHAiButton.java -=============- Problem : No, quick way for TINI to create SHA button objects. Since : 0.00 Description: In TINI there was a need to only create allocation for the SHA button and initialize parameters later. Solution : A new constructor was added with no parameters and a setiButton method was created to initialize the parameters. -=============- Package: com.dalsemi.onewire.adapter com.dalsemi.onewire.utils.TMEXAdapter.java (non-TINI only) -=============- Problem : Static initializer would through an exception on platforms that did not set the "java.library.path" system property. Since : 0.00 Description: There is no condition to check for a null "java.library.path". Solution : Check to see if "java.library.path" is null and if so assume that the native drivers are available. -=============- Package: com.dalsemi.onewire.utils com.dalsemi.onewire.utils.OneWireMonitor.java -=============- Problem : killMonitor method returned before Thread death. Since : 0.00 Description: Thread would not end before main thread resulting in the application hanging on exit. Solution : Synchronize setting of the keepRunning flag and then waiting for the thread to die. -=============- com.dalsemi.onewire.utils.Address.java -=============- Problem : Slow manipulation of strings and shifting longs. Since : 0.00 Description: There was a faster way to do string addresses and long shifts. Solution : Changed the address to hex and converted to string after and also changed shifts. -=============- Examples: debit.java -=============- Problem : Since : 0.00 Description: Changed the code to match the change in the SHAiButton file for just allocating space and initializing parameters later. Solution : -=============- ADContainerDemo.java, OWC16Test.java, OWMemUtil.java, SetDefault.java -=============- Problem : java.io.DataInputStream.readLine deprecated+ Since : 0.00 Description: When compiling using DataInputStream to read a line the warning for deprecation appeared. Solution : Use BufferedReader instead of DataInputStream. -=============- OWDump.java, OWMemUtil.java, -=============- Problem : com.dalsemi.onewire.container.PagedMemoryBank.haveExtraInfo has been deprecated. Since : 0.00 Description: When compiling using haveExtraInfo, warning for deprecation appeared. Solution : Used hasExtraInfo instead of haveExtraInfo. -=============-