package POEDaemon::WheelRun::SysctlSet; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use POE; use POEDaemon; sub states { return $_[0], [qw( sysctlset_start sysctlset_stop sysctlset_childexit sysctlset )]; } sub sysctlset_start { my $kernel = $_[KERNEL]; $kernel->yield(wheelrun_exec => { #prog => [ 'util/sysctl.pl', 'set' ], prog => [ 'util/sysctl-suidwrapper', 'set' ], name => 'sysctlset', }); my $sysctls; foreach my $name (@{cfg->{valid_pwms}}) { if ($name =~ /^([12])([ab])$/i) { my $group = $1; my $port = uc $2; $sysctls->{sprintf "dev.am335x_pwm.%s.period", $group} = 1000; $sysctls->{sprintf "dev.am335x_pwm.%s.duty%s", $group, $port} = 0; } } foreach my $name (keys %$sysctls) { $kernel->yield(sysctlset => { name => $name, value => $sysctls->{$name}, }); } foreach my $num (sort {$a <=> $b} @{cfg->{valid_adcs} || []}) { my $name = sprintf "dev.ti_adc.0.ain.%s.enable", $num; $kernel->yield(sysctlset => { name => $name, value => 1, }); } } sub sysctlset_stop { my ($kernel, $heap) = @_[KERNEL, HEAP]; $kernel->yield(wheelrun_kill => { wheel_name => 'sysctlset' }); my $line = 'kill'; my $wheel = $heap->{wheel_run}->{children_by_name}->{sysctlset}->{wheel}; return unless $wheel; #log_enabled && logline "put line = '%s'", $line; $wheel->put($line); } sub sysctlset_childexit { my ($kernel, $heap) = @_[KERNEL, HEAP]; unless ($heap->{shutdown}) { $kernel->yield(shutdown => 'sysctlset child abnormally terminated'); } } sub sysctlset { my ($heap, $args) = @_[HEAP, ARG0]; my $name = $args->{name}; my $value = $args->{value}; $heap->{sysctlset}->{status}->{$name} = $value; my $line = sprintf "%s=%s", $name, $value; my $wheel = $heap->{wheel_run}->{children_by_name}->{sysctlset}->{wheel}; return unless $wheel; #log_enabled && logline "put line = '%s'", $line; $wheel->put($line); } 1;