2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 01:09:47 +00:00

FWupdate preparation

git-svn-id: https://svn.fhem.de/fhem/trunk@5227 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-03-15 15:07:54 +00:00
parent 92a4c47d93
commit 7f4df4fd51

View File

@ -2027,6 +2027,7 @@ sub CUL_HM_parseCommon(@){#####################################################
my $paired = 0; #internal flag
CUL_HM_infoUpdtDevData($shash->{NAME}, $shash,$p)
if (!$modules{CUL_HM}{helper}{hmManualOper});
if ( $ioHash->{hmPair}
||( $ioHash->{hmPairSerial}
&& $ioHash->{hmPairSerial} eq $attr{$shash->{NAME}}{serialNr})){
@ -3687,7 +3688,7 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
my $bs = hex(substr($line,$pos,4))*2+4;
return "file corrupt. length:$fs expected:".($pos+$bs)
if ($fs<$pos+$bs);
my @msg = grep !/^$/,unpack 'A74(A70)*',substr($line,$pos,$bs);
my @msg = grep !/^$/,unpack '(A60)*',substr($line,$pos,$bs);
push @imA,\@msg; # image[block][msg]
$pos += $bs;
}
@ -3703,10 +3704,10 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++
$modules{CUL_HM}{helper}{updateId} = $id;
$modules{CUL_HM}{helper}{updateNbr} = 10;
my $msg;
Log3 $name,3,"CUL_HM fwUpdate started for $name";
Log3 $name,1,"CUL_HM fwUpdate started for $name";
CUL_HM_SndCmd($hash, sprintf("%02X",$modules{CUL_HM}{helper}{updateNbr})
."3011$id${dst}CA");
InternalTimer(gettimeofday()+0.3,"CUL_HM_FWupdateSim",$dst.$id."00",0);#General simulation
# InternalTimer(gettimeofday()+0.3,"CUL_HM_FWupdateSim",$dst.$id."00",0);
}
elsif($cmd eq "postEvent") { ################################################
my (undef,undef,$cond) = @a;
@ -4654,35 +4655,47 @@ sub CUL_HM_FWupdateSteps($){#steps for FW update
my $id = $modules{CUL_HM}{helper}{updateId};
my $mNo = $modules{CUL_HM}{helper}{updateNbr};
my $mNoA = sprintf("%02X",$mNo);
return if ($mIn !~ m/$mNoA..02$dst${id}00/);
Log 1,"General loop fwUpdate $mNoA------------";
return if ($mIn !~ m/$mNoA..02$dst${id}00/&&$mIn !~ m/0010${dst}00000000/);
if ($step == 0){#check bootloader entered - now chnage speed
Log3 $name,4,"CUL_HM fwUpdate switch speed";
return if ($mIn =~ m/$mNoA..02$dst${id}00/);
Log3 $name,1,"CUL_HM fwUpdate $name entered mode - switch speed";
$mNo = (++$mNo)%256; $mNoA = sprintf("%02X",$mNo);
CUL_HM_SndCmd($hash,"${mNoA}00CB$id${dst}105B11F81547");
CUL_HM_SndCmd($hash,"${mNoA}20CB$id${dst}105B11F815470B081A1C191D1BC71C001DB221B623EA");
select(undef, undef, undef, (0.04));
CUL_HM_FWupdateSpeed($name,100);
select(undef, undef, undef, (0.1));
select(undef, undef, undef, (0.04));
$mNo = (++$mNo)%256; $mNoA = sprintf("%02X",$mNo);
CUL_HM_SndCmd($hash,"${mNoA}20CB$id${dst}105B11F81547");
$modules{CUL_HM}{helper}{updateStep}++;
$modules{CUL_HM}{helper}{updateNbr} = $mNo;
InternalTimer(gettimeofday()+0.3,"CUL_HM_FWupdateSim","${dst}${id}00",0);#General simulation
RemoveInternalTimer("fail:notInBootLoader");
InternalTimer(gettimeofday()+5,"CUL_HM_FWupdateEnd","fail:SpeedChangeFailed",0);
}
else{# check response - start programming
##16.130 CUL_Parse: A 0A 30 0002 235EDB 255E91 00
##16.338 CUL_Parse: A 0A 39 0002 235EDB 255E91 00
##16.716 CUL_Parse: A 0A 42 0002 235EDB 255E91 00
##17.093 CUL_Parse: A 0A 4B 0002 235EDB 255E91 00
##17.471 CUL_Parse: A 0A 54 0002 235EDB 255E91 00
##17.848 CUL_Parse: A 0A 5D 0002 235EDB 255E91 00
##...
##43.621 4: CUL_Parse: iocu1 A 0A 58 0002 235EDB 255E91 00
##44.034 4: CUL_Parse: iocu1 A 0A 61 0002 235EDB 255E91 00
##44.161 4: CUL_Parse: iocu1 A 1D 6A 20CA 255E91 235EDB 00121642446D1C3F45F240ED84DC5E7C1AB7554D
##44.180 4: CUL_Parse: iocu1 A 0A 6A 0002 235EDB 255E91 00
## one block = 10 messages in 200-1000ms
my $blocks = scalar(@{$modules{CUL_HM}{helper}{updateData}});
RemoveInternalTimer("respPend:$hash->{DEF}");
RemoveInternalTimer("fail:SpeedChangeFailed");
RemoveInternalTimer("fail:Block".($step-1));
if ($blocks < $step){#last block
CUL_HM_FWupdateSpeed($name,10);
CUL_HM_FWupdateEnd("done");
Log3 $name,4,"CUL_HM fwUpdate completed";
Log3 $name,1,"CUL_HM fwUpdate completed";
}
else{# programming continue
my $bl = ${$modules{CUL_HM}{helper}{updateData}}[$step-1];
my $no = scalar(@{$bl});
Log3 $name,4,"CUL_HM fwUpdate write block $step of $blocks: $no messages";
Log3 $name,1,"CUL_HM fwUpdate write block $step of $blocks: $no messages";
foreach my $msgP (@{$bl}){
$mNo = (++$mNo)%256; $mNoA = sprintf("%02X",$mNo);
CUL_HM_SndCmd($hash, $mNoA.((--$no)?"00":"20")."CA$id$dst".$msgP);
@ -4690,7 +4703,7 @@ sub CUL_HM_FWupdateSteps($){#steps for FW update
}
$modules{CUL_HM}{helper}{updateStep}++;
$modules{CUL_HM}{helper}{updateNbr} = $mNo;
InternalTimer(gettimeofday()+0.3,"CUL_HM_FWupdateSim","${dst}${id}00",0);#General simulation
#InternalTimer(gettimeofday()+0.3,"CUL_HM_FWupdateSim","${dst}${id}00",0);
InternalTimer(gettimeofday()+5,"CUL_HM_FWupdateEnd","fail:Block$step",0);
}
}
@ -4724,7 +4737,8 @@ sub CUL_HM_FWupdateSpeed($$){#set IO speed
sub CUL_HM_FWupdateSim($){#end FW Simulation
my $msg = shift;
my $ioName = $defs{$modules{CUL_HM}{helper}{updatingName}}->{IODev}->{NAME};
# CUL_HM_Parse($defs{$ioName},"A00118002$msg");
my $mNo = sprintf("%02X",$modules{CUL_HM}{helper}{updateNbr});
CUL_HM_Parse($defs{$ioName},"A00${mNo}8002$msg");
}