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(); }