package POEDaemon::Config; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; my $config = {}; sub get { return $config; } sub i { my $k = $_[0]; return $config->{event_namemap}->{input}->{$k}; } sub o { my $k = $_[0]; return $config->{event_namemap}->{output}->{$k}; } sub ON { return 1; } sub OFF { return 0; } sub TOGGLE { return 't'; } sub RISE { return 1; } sub SET { return 0; } sub _cfg_error ($$) { my ($file, $type) = @_; my $error = $type eq 'open' ? $! : $@; $error =~ s/^\s+//; $error =~ s/\s+$//; my $msg = sprintf "\n\n%s: config file '%s' %s error:\n\n%s\n\n\n", $0, $file, $type, $error; die $msg; } foreach my $file (qw(config.pl secret.pl)) { unless (open F, $file) { next if $file eq 'secret.pl'; _cfg_error $file, 'open'; } my $code = join '', ; close F; die unless length $code; _cfg_error $file, 'load' unless eval $code; } $config = {} unless $config; { my $bbb_pwm_to_gpio = { '0a' => 110, '0b' => 111, '1a' => 50, '1b' => 51, '2a' => 22, '2b' => 23, }; my $found_out_pins = [ $config->{aliveled_gpio_pin} || (), $config->{tcpclient_connected_gpio_pin} || (), ]; my $found_pwm_pins = []; foreach my $pwm (@{$config->{valid_pwms} || []}) { push @$found_pwm_pins, $bbb_pwm_to_gpio->{$pwm} if $bbb_pwm_to_gpio->{$pwm}; } $config->{change_gpio_pins_extra} = $found_out_pins if @$found_out_pins; if (@{$config->{tcpclient_valid_gpios} || []} && (@$found_out_pins || @$found_pwm_pins)) { my $tcpclient_valid_gpios = []; foreach my $valid_pin (@{$config->{tcpclient_valid_gpios} || []}) { my $conflict; foreach my $conflicting_pin (@$found_out_pins, @$found_pwm_pins) { if ($valid_pin == $conflicting_pin) { $conflict = 1; last; } } push @$tcpclient_valid_gpios, $valid_pin unless $conflict; } $config->{tcpclient_valid_gpios} = $tcpclient_valid_gpios; } if ($config->{event_namemap}) { $config->{event_namemap_reverse}->{$_} = { reverse %{$config->{event_namemap}->{$_} || {}} } foreach qw(input output); } my $poesession_mode = $config->{poesession_mode} || ''; my $modules; if ($poesession_mode eq 'miniclient') { $modules = [ 'POEDaemon::System', 'POEDaemon::System::Stats', 'POEDaemon::WheelRun::DNSChild', 'POEDaemon::TCPClient', 'POEDaemon::TCPClient::Main', #'POEDaemon::DNS', ]; } elsif ($poesession_mode eq 'client') { $modules = [ 'POEDaemon::System', 'POEDaemon::System::Stats', 'POEDaemon::WheelRun', 'POEDaemon::WheelRun::Watchdog', 'POEDaemon::WheelRun::GPIOPoll', 'POEDaemon::WheelRun::GPIOInterrupt', 'POEDaemon::WheelRun::GPIOChange', 'POEDaemon::WheelRun::GPIOWS2801', 'POEDaemon::WheelRun::SysctlSet', 'POEDaemon::WheelRun::SysctlGet', 'POEDaemon::WheelRun::NTPdc', 'POEDaemon::WheelRun::SystemUpgrade', 'POEDaemon::WheelRun::I2Csysutil', 'POEDaemon::WheelRun::DNSChild', 'POEDaemon::WheelRun::OWServer', 'POEDaemon::WheelRun::OWNet', 'POEDaemon::TCPClient', 'POEDaemon::TCPClient::Main', #'POEDaemon::DNS', ]; } elsif ($poesession_mode eq 'server') { $modules = [ 'POEDaemon::Log', 'POEDaemon::System', 'POEDaemon::System::Reload', 'POEDaemon::System::Stats', 'POEDaemon::Cron', 'POEDaemon::Sunrise', 'POEDaemon::WheelRun', 'POEDaemon::WheelRun::Restart', 'POEDaemon::WheelRun::Watchdog', 'POEDaemon::WheelRun::SysctlGet', 'POEDaemon::WheelRun::DNSChild', 'POEDaemon::WheelRun::PS', 'POEDaemon::TCPServer', 'POEDaemon::TCPServer::Main', 'POEDaemon::TCPServer::Main::Cmds::FastCGI', 'POEDaemon::TCPServer::Main::Cmds::POEClient', 'POEDaemon::TCPServer::Main::Cmds::Admin', #'POEDaemon::TCPServer::Main::Cmds::HTTP', 'POEDaemon::TCPServer::Main::Periodic::WS2801', 'POEDaemon::TCPClient', 'POEDaemon::TCPClient::Main', #'POEDaemon::HTTPClient', 'POEDaemon::EventSystem', 'POEDaemon::EventSystem::Handlers', 'POEDaemon::EasyDBI', 'POEDaemon::EasyDBI::EventLog', #'POEDaemon::AIO', ]; } elsif ($poesession_mode eq 'ioserver') { $modules = [ 'POEDaemon::System', 'POEDaemon::System::Stats', 'POEDaemon::Cron', 'POEDaemon::WheelRun', 'POEDaemon::WheelRun::Watchdog', 'POEDaemon::WheelRun::GPIOPoll', 'POEDaemon::WheelRun::GPIOChange', 'POEDaemon::WheelRun::SysctlSet', 'POEDaemon::WheelRun::SysctlGet', 'POEDaemon::TCPServer', 'POEDaemon::TCPServer::Main', 'POEDaemon::EventSystem::Handlers', ]; } elsif ($poesession_mode eq 'shcp') { $modules = [ 'POEDaemon::Log', 'POEDaemon::System', 'POEDaemon::System::Reload', 'POEDaemon::System::Stats', 'POEDaemon::WheelRun', 'POEDaemon::WheelRun::Watchdog', 'POEDaemon::WheelRun::SysctlGet', 'POEDaemon::WheelRun::DNSChild', 'POEDaemon::TCPServer', 'POEDaemon::TCPServer::Main', 'POEDaemon::TCPServer::Main::Cmds::HTTP', 'POEDaemon::TCPClient', 'POEDaemon::TCPClient::SHCP', 'POEDaemon::HTTPClient', 'POEDaemon::AIO', ]; } else { $modules = [ 'POEDaemon::System', 'POEDaemon::System::Stats', 'POEDaemon::Cron', 'POEDaemon::WheelRun', 'POEDaemon::WheelRun::Watchdog', 'POEDaemon::WheelRun::GPIOPoll', 'POEDaemon::WheelRun::GPIOChange', 'POEDaemon::WheelRun::SysctlSet', 'POEDaemon::WheelRun::SysctlGet', 'POEDaemon::TCPServer', 'POEDaemon::TCPServer::Main', #'POEDaemon::TCPClient', #'POEDaemon::TCPClient::Main', #'POEDaemon::DNS', 'POEDaemon::EventSystem::Handlers', ]; } $config->{modules} = $modules; } 1;