package POEDaemon::WheelRun::I2Csysutil; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use POE; use POEDaemon; sub states { return $_[0], [qw( i2csysutil_start i2csysutil_stop i2csysutil_childexit i2csysutil i2csysutil_stdout_line )]; } sub i2csysutil_start { my $kernel = $_[KERNEL]; $kernel->yield(wheelrun_exec => { prog => [ 'util/bbb-i2csysutil' ], name => 'i2csysutil', stdout_event => 'i2csysutil_stdout_line', }); } sub i2csysutil_stop { my $kernel = $_[KERNEL]; $kernel->yield(wheelrun_kill => { wheel_name => 'i2csysutil' }); } sub i2csysutil_childexit { my ($kernel, $heap) = @_[KERNEL, HEAP]; unless ($heap->{shutdown}) { $kernel->yield(shutdown => 'i2csysutil child abnormally terminated'); } } sub i2csysutil { my ($heap, $args) = @_[HEAP, ARG0]; $heap->{i2csysutil}->{source_wheel_id} = $args->{source_tcpclient_wheel_id} || $args->{source_tcpclient_readwrite_wheel_id} || $args->{source_wheel_id} || return; my $wheel = $heap->{wheel_run}->{children_by_name}->{i2csysutil}->{wheel}; return unless $wheel; my $cmd = '-'; log_enabled && logline "put '%s'", $cmd; $wheel->put($cmd); } sub i2csysutil_stdout_line { my ($kernel, $session, $heap, $line) = @_[KERNEL, SESSION, HEAP, ARG0]; log_enabled && logline "line = '%s'", $line; $line =~ s/^\s*//; $line =~ s/\s*$//; $line =~ s/\s+/\x20/g; return unless $line =~ s/^i2c\s+//; my $output_per_target; $output_per_target->{tcpserver} = sprintf "I2CSYSUTIL %s", $line; $output_per_target->{tcpclient} = sprintf "%s i2csysutil %s", POECLIENT_CMD_PREFIX, $line; delete $heap->{i2csysutil}->{source_wheel_id}; #my $wheel_id = delete $heap->{i2csysutil}->{source_wheel_id}; # # #return unless $wheel_id; # # #my $output = $line; # # #$output = sprintf "%s i2csysutil %s", # POECLIENT_CMD_PREFIX, # $output; # # #$kernel->yield(tcpclient_output => #{ # wheel_id => $wheel_id, # output => $output, #}); $kernel->call($session => wheelrun_send_network_reply => { output_per_target => $output_per_target, }); } 1;