mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-16 04:36:02 +00:00
CUL frequency and bandwidth setting
git-svn-id: https://svn.fhem.de/fhem/trunk@239 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
1f17ec6e27
commit
2316cdf6c5
@ -34,17 +34,19 @@ sub CUL_Ready($$);
|
||||
my %msghist; # Used when more than one CUL is attached
|
||||
my $msgcount = 0;
|
||||
my %gets = (
|
||||
"ccreg" => "C",
|
||||
"readeeprom" => "R",
|
||||
"version" => "V",
|
||||
"time" => "t",
|
||||
"ccreg" => "C",
|
||||
"eeprom" => "R",
|
||||
"version" => "V",
|
||||
"time" => "t",
|
||||
);
|
||||
|
||||
my %sets = (
|
||||
"writeeeprom" => "W",
|
||||
"sendrawFS20" => "F",
|
||||
"sendrawFHT" => "T",
|
||||
"verbose" => "X",
|
||||
"eeprom" => "W",
|
||||
"rawFS20" => "F",
|
||||
"rawFHT" => "T",
|
||||
"verbose" => "X",
|
||||
"freq" => "=",
|
||||
"bandwidth" => "=",
|
||||
);
|
||||
|
||||
sub
|
||||
@ -147,7 +149,53 @@ CUL_Set($@)
|
||||
if(!defined($sets{$a[1]}));
|
||||
|
||||
my $arg = ($a[2] ? $a[2] : "");
|
||||
CUL_Write($hash, $sets{$a[1]}, $arg) if(!IsDummy($hash->{NAME}));
|
||||
|
||||
if($a[1] eq "freq") { # MHz
|
||||
|
||||
my $f = $arg/26*65536;
|
||||
|
||||
my $f2 = sprintf("%02x", $f / 65536);
|
||||
my $f1 = sprintf("%02x", int($f % 65536) / 256);
|
||||
my $f0 = sprintf("%02x", $f % 256);
|
||||
$arg = sprintf("%.3f", (hex($f2)*65536+hex($f1)*256+hex($f0))/65536*26);
|
||||
my $msg =
|
||||
"Setting FREQ2..0 (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz, verbose to 01";
|
||||
Log 1, $msg;
|
||||
CUL_Write($hash, "W", "0D$f2"); # Will reprogram the CC1101
|
||||
CUL_Write($hash, "W", "0E$f1");
|
||||
CUL_Write($hash, "W", "0F$f0");
|
||||
CUL_Write($hash, "X", "01");
|
||||
return $msg;
|
||||
|
||||
} elsif($a[1] eq "bandwidth") { # KHz
|
||||
|
||||
my $ob = 5;
|
||||
if(!IsDummy($hash->{NAME})) {
|
||||
CUL_Write($hash, "C", "10");
|
||||
$ob = CUL_ReadAnswer($hash, $a[1]);
|
||||
return "Can't get old MDMCFG4 value" if($ob !~ m,/ (.*)\r,);
|
||||
$ob = $1 & 0x0f;
|
||||
}
|
||||
|
||||
my ($bits, $bw) = (0,0);
|
||||
for (my $e = 0; $e < 4; $e++) {
|
||||
for (my $m = 0; $m < 4; $m++) {
|
||||
$bits = ($e<<6)+($m<<4);
|
||||
$bw = int(26000/(8 * (4+$m) * (1 << $e))); # KHz
|
||||
goto GOTBW if($arg >= $bw);
|
||||
}
|
||||
}
|
||||
GOTBW:
|
||||
$ob = sprintf("%02x", $ob+$bits);
|
||||
my $msg = "Setting MDMCFG4 (10) to $ob = $bw KHz, verbose to 01";
|
||||
Log 1, $msg;
|
||||
CUL_Write($hash, "W", "10$ob");
|
||||
CUL_Write($hash, "X", "01");
|
||||
return $msg;
|
||||
|
||||
} else {
|
||||
CUL_Write($hash, $sets{$a[1]}, $arg);
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
@ -164,6 +212,7 @@ CUL_Get($@)
|
||||
my $arg = ($a[2] ? $a[2] : "");
|
||||
CUL_Write($hash, $gets{$a[1]}, $arg) if(!IsDummy($hash->{NAME}));
|
||||
my $msg = CUL_ReadAnswer($hash, $a[1]);
|
||||
$msg = "No answer" if(!defined($msg));
|
||||
$msg =~ s/[\r\n]//g;
|
||||
|
||||
$hash->{READINGS}{$a[1]}{VAL} = $msg;
|
||||
|
Loading…
x
Reference in New Issue
Block a user