The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Hardware::iButton::Device - object to represent iButtons

SYNOPSIS

use Hardware::iButton::Connection;
$c = new Hardware::iButton::Connection "/dev/ttyS0";
@b = $c->scan();
foreach $b (@b) {
    print "id: ", $b->id(), ", reg0: ",$b->readreg(0),"\n";
}

DESCRIPTION

This module talks to iButtons via the "active" serial interface (anything using the DS2480, including the DS1411k and the DS 9097U). It builds up a list of devices available, lets you read and write their registers, etc.

The connection object is an Hardware::iButton::Connection. The main user-visible purpose of it is to provide a list of Hardware::iButton::Device objects. These can be subclassed once their family codes are known to provide specialized methods unique to the capabilities of that device. Those devices will then be Hardware::iButton::Device::DS1920, etc.

AUTHOR

Brian Warner, warner@lothar.com

SEE ALSO

http://www.ibutton.com, http://sof.mit.edu/ibuttonpunks/

accessors

$family = $b->family();  # "01" for DS1990A/DS2401 "id only" buttons
$serial = $b->serial();  # "000001F1F1F3", as stamped on button
$crc = $b->crc();        # "E5" error check byte
$id = $b->id();   # the previous three joined together: "01000001F1F1F3E5"

select

$b->select();

Activate this button (in Dallas terms, "move it to the Transport Layer"). All other buttons will be idled and will not respond to commands until the bus is reset with $c-reset()>. Returns 1 for success, undef if the button is no longer on the bus.

is_present

$button->is_present();

Checks to see if the given button is still present, using the Search ROM command. Returns 1 if it is, 0 if not.

Button Introspection

or, how not to get lost in your own navel

$model = $b->model();    # "DS1992"
$bytes = $b->memsize(); # 128 bytes
$type = $b->memtype();   # "NVRAM"
$special = $b->specialfuncs();   # "thermometer", "clock", "java", "crypto"

read_memory

$data = $b->read_memory($start, $length);

Reads memory from the iButton. Acts like $data = substr(memory, $start, $length). If you read beyond the end of the device, you will get all ones in the unimplemented addresses.

write_memory

$b->write_memory($start, $data);

Writes memory to the iButton NVRAM. Acts like substr(memory, $start, length($data)) = $data;. Writes in chunks to separate 32-byte pages, each chunk going to the scratchpad first, verified there, then copied into NVRAM. Returns the number of bytes successfully written.

read_temperature

$temp = $b->read_temperature();
$temp = $b->read_temperature_hires();

These methods can be used on DS1820/DS1920 Thermometer iButtons. They return a temperature in degrees C. The range is -55C to +100C, the resolution of the first is 0.5C, the resolution of the second is about 0.01C. The accuracy is about +/- 0.5C.

Useful conversions: $f = $c*9/5 + 32, $c = ($f-32)*5/9 .