#ifndef LEARN_AT____LEARN____CAMERA_HPP_
#define LEARN_AT____LEARN____CAMERA_HPP_

// /home/siemens/bip/examples/sync_lec/learn.bip:44:1
// include package "master" header
#include <learn.hpp>

#include <Atom.hpp>

// User include given in @cpp annotation
#include <utilities.hpp>

#include <learn/AtomIPort__learn__intPort.hpp>


#include <learn/AtomEPort__learn__intPort.hpp>

#include <learn/PV__learn__intPort.hpp>



class AT__learn__Camera : public Atom {
private:
   // internal ports & associated port values
    AtomIPort__learn__intPort &_iport_decl__capture;
    PV__learn__intPort _iport_decl_pv__capture;
    AtomIPort__learn__intPort &_iport_decl__sendInput;
    PV__learn__intPort _iport_decl_pv__sendInput;

    // exported ports
    AtomEPort__learn__intPort &_eport_decl__capture;
    AtomEPort__learn__intPort &_eport_decl__sendInput;
public:
    AT__learn__Camera(const string &name , AtomIPort__learn__intPort &_iport_decl__capture, AtomIPort__learn__intPort &_iport_decl__sendInput
                             
                             , AtomEPort__learn__intPort &_eport_decl__capture, AtomEPort__learn__intPort &_eport_decl__sendInput
                             
                             );
    virtual ~AT__learn__Camera();

    virtual BipError& execute(PortValue &portValue);
    virtual BipError& execute(AtomExternalPort &portValue);
    virtual BipError& initialize();
    virtual string toString() const;

protected:
    BipError& update();

    BipError& executeInternalTransitions();
    BipError& checkInvariants();

    const static size_t bvector_size = 2/(8*sizeof(int))+((2%(8*sizeof(int))) > 0 ? 1 : 0);
    int __statesbv[ bvector_size ];

    // component data declarations
    int _id__inputIndex;

    // enabledness of transitions
    bool _transguard__1;
    bool _transguard__2;

    // index of the latest executed transition
    int __previous;

    bool atIdle() const;
    bool toIdle();
    bool fromIdle();
    bool atRead() const;
    bool toRead();
    bool fromRead();
};

#endif // LEARN_AT____LEARN____CAMERA_HPP_
