Files
statechart/example/Camera/Main.cpp
Andreas Huber 5efc93cc69 - Finished reference documentation
- Updated Copyright notices


[SVN r21607]
2004-01-11 23:08:54 +00:00

112 lines
3.0 KiB
C++

//////////////////////////////////////////////////////////////////////////////
// Copyright (c) Andreas Huber Doenni 2002-2004.
// Use, modification and distribution are subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// This program shows how a state machine can be spread over several
// translation units if necessary. The inner workings of a digital camera are
// modeled, the corresponding state chart looks as follows:
//
// ---------------------------
// | |
// | NotShooting |
// | |
// | ------------- |<---O
// | O--->| Idle | | --------------
// | ------------- | EvShutterHalf | |
// | | ^ |------------------>| Shooting |
// | EvConfig | | EvConfig | | |
// | v | | EvShutterRelease | |
// | ------------- |<------------------| |
// | | Configuring | | | |
// | ------------- | --------------
// ---------------------------
//
// The states Configuring and Shooting will contain a large amount of logic,
// so they are implemented in their own translation units. This way one team
// could implement the Configuring mode while the other would work on the
// Shooting mode. Once the above state chart is implemented, the teams could
// work completely independently of each other.
#include "Precompiled.hpp"
#include "Camera.hpp"
#include <iostream>
char GetKey()
{
char key;
std::cin >> key;
return key;
}
int main( int argc, char * argv[] )
{
argc;
argv;
std::cout << "boost::fsm Camera example\n\n";
std::cout << "h<CR>: Press shutter half-way\n";
std::cout << "f<CR>: Press shutter fully\n";
std::cout << "r<CR>: Release shutter\n";
std::cout << "c<CR>: Enter/exit configuration\n";
std::cout << "e<CR>: Exits the program\n\n";
std::cout << "You may chain commands, e.g. hfr<CR> first presses the shutter half-way,\n";
std::cout << "fully and then releases it.\n\n";
Camera myCamera;
myCamera.initiate();
char key = GetKey();
while ( key != 'e' )
{
switch( key )
{
case 'h':
{
myCamera.process_event( EvShutterHalf() );
}
break;
case 'f':
{
myCamera.process_event( EvShutterFull() );
}
break;
case 'r':
{
myCamera.process_event( EvShutterRelease() );
}
break;
case 'c':
{
myCamera.process_event( EvConfig() );
}
break;
default:
{
std::cout << "Invalid key!\n";
}
break;
}
key = GetKey();
}
return 0;
}