Code:
sub encode_dpt9 { # 2byte signed float
my $state = shift;
my $data;
my $sign = ($state <0 ? 0x8000 : 0);
my $exp = 0;
my $mant = 0;
$mant = int($state * 100.0);
while (abs($mant) > 2047) {
$mant /= 2;
$exp++;
}
$data = $sign | ($exp << 11) | ($mant & 0x07ff);
return $data >> 8, $data & 0xff;
}
Den ganzen Topf mit Spaghetticode - garantiert frei von OO&Klassen - gibts hier
(in der sub knx_write sollten die 4 Zeilen zu finden sein, das dann auch via eibd rauszubringen)Makki


Einen Kommentar schreiben: