sub initAppControl () { my $config = shift; $config->{deviceControlCallback} = \&addDeviceControlCB; # create and open control FIFO if ('' eq (-p "$config->{fifoControl}->{status}" )) { POSIX::mkfifo ("$config->{fifoControl}->{status}", 0700); } if ('' eq (-p "$config->{fifoControl}->{control}" )) { POSIX::mkfifo ("$config->{fifoControl}->{control}", 0700); } # open pipes, set status pipe to "autoflush" open ($config->{fifo}->{appControl}->{control}, "+<", $config->{fifoControl}->{control}) || die "Could not open status pipe ($!)\n"; open ($config->{fifo}->{appControl}->{status}, "+>", $config->{fifoControl}->{status}) || die "Could not open control pipe ($!)\n"; $config->{fifo}->{appControl}->{status}->autoflush(1); } sub testSequence () { my $appControlFifo; my $deviceControlFifo; if ('' eq (-p "$sm->{config}->{deviceControl}" )) { POSIX::mkfifo ("$sm->{config}->{deviceControl}", 0700); } # shorthands for pipe handles open ($appControlFifo, "+>", $sm->{config}->{fifoControl}->{control}) || die "Could not open status pipe for writing ($!)\n"; open ($deviceControlFifo, "+>", $sm->{config}->{deviceControl}) || die "Could not open device pipe for writing ($!)\n"; $| = 1; $appControlFifo->autoflush(1); $deviceControlFifo->autoflush(1); # test sequence print $appControlFifo "connect to device\n"; # state transition: 01 -> 02, currently automatically set print $appControlFifo "connect to device\n"; # keep current state print $appControlFifo "connect to device\n"; # keep current state print $appControlFifo "disconnect device\n"; print $deviceControlFifo "^MODE:1,1\n"; # state transition: 02 -> 03 if ($sm->Instance() =~ "Statemachine::03") # check if transition succeeded (kind of ASSERT) { print "transition succeeded\n"; } print $appControlFifo "connect to internet\n"; # state transition: 03 -> 04 print $appControlFifo "internet connected\n"; # state transition: 03 -> 04 }