Exemple #1
0
function cacheread($con, $addr, $age = 0)
{
    $buf = new EIBBuffer();
    $src = new EIBAddr();
    $addr = gaddrparse($addr);
    $r = $con->EIB_Cache_Read_Sync($addr, $src, $buf, $age);
    if ($r == -1 && $con->GetLastError() == EIBConnection::ENOENT) {
        return array(formatgaddr($addr), -2);
    }
    if ($r == -1) {
        return array(formatgaddr($addr), -1);
    }
    $data = $buf->buffer;
    if ($data[0] & 0x3 || ($data[1] & 0xc0) == 0xc0) {
        return array(formatgaddr($addr), -3);
    }
    if (strlen($data) == 2) {
        $res = unpack("nval", $data);
        $val = $res["val"] & 0x3f;
        return array(formatgaddr($addr), formatiaddr($src->addr), $val);
    } else {
        $res = array(formatgaddr($addr), formatiaddr($src->addr));
        for ($i = 2; $i < strlen($data); $i++) {
            $r = unpack("Cval", $data[$i]);
            $res[] = $r["val"];
        }
        return $res;
    }
}
function groupwrite($con, $addr, $val)
{
    $addr = gaddrparse($addr);
    $header = 0x80;
    $r = $con->EIBOpenT_Group($addr, 1);
    if ($r == -1) {
        return -1;
    }
    $data = pack("n", $header);
    for ($i = 0; $i < count($val); $i++) {
        $data .= pack("C", $val[$i]);
    }
    $r = $con->EIBSendAPDU($data);
    if ($r == -1) {
        return -1;
    }
    return $con->EIBReset();
}