📄 cusprayer.cpp
字号:
// {{{RME classifier 'Logical View::ControlUnits::CUSprayer'#if defined( PRAGMA ) && ! defined( PRAGMA_IMPLEMENTED )#pragma implementation "rtg/CUSprayer.h"#endif#include <RTSystem/MarkI_x86VisualCpp60.h>#include <rtg/CUSprayer.h>// {{{RME tool 'OT::Cpp' property 'ImplementationPreface'// {{{USR// }}}USR// }}}RMEstatic const RTRelayDescriptor rtg_relays[] ={ { "boiler" , &Boiler::Conjugate::rt_class , 1 // cardinality } , { "reliefValve" , &ReliefValve::Conjugate::rt_class , 1 // cardinality } , { "coffeeControl" , &CUControl_Sprayer::Base::rt_class , 1 // cardinality }};static RTActor * new_CUSprayer_Actor( RTController * _rts, RTActorRef * _ref ){ return new CUSprayer_Actor( _rts, _ref );}const RTActorClass CUSprayer ={ (const RTActorClass *)0 , "CUSprayer" , (RTVersionId)0 , 3 , rtg_relays , new_CUSprayer_Actor};static const char * const rtg_state_names[] ={ "TOP" , "NotBrewing" , "Spraying" , "PauseBrewing" , "ReadyToBrew"};#define SUPER RTActorCUSprayer_Actor::CUSprayer_Actor( RTController * rtg_rts, RTActorRef * rtg_ref ) : RTActor( rtg_rts, rtg_ref ){}CUSprayer_Actor::~CUSprayer_Actor( void ){}// {{{RME operation 'sprayOn()'void CUSprayer_Actor::sprayOn( void ){ // {{{USR boiler.boilerOn().send(); reliefValve.valveClose().send();#ifdef DEBUG cout << "(Sprayer) Spraying water onto coffee grounds.\n" << flush;#endif // }}}USR}// }}}RME// {{{RME operation 'sprayOff()'void CUSprayer_Actor::sprayOff( void ){ // {{{USR boiler.boilerOff().send(); reliefValve.valveOpen().send();#ifdef DEBUG cout << "(Sprayer) Stopped spraying water.\n" << flush;#endif // }}}USR}// }}}RMEint CUSprayer_Actor::_followInV( RTBindingEnd & rtg_end, int rtg_portId, int rtg_repIndex ){ switch( rtg_portId ) { case 0: // boiler if( rtg_repIndex < 1 ) { rtg_end.port = &boiler; rtg_end.index = rtg_repIndex; return 1; } break; case 1: // reliefValve if( rtg_repIndex < 1 ) { rtg_end.port = &reliefValve; rtg_end.index = rtg_repIndex; return 1; } break; case 2: // coffeeControl if( rtg_repIndex < 1 ) { rtg_end.port = &coffeeControl; rtg_end.index = rtg_repIndex; return 1; } break; default: break; } return RTActor::_followInV( rtg_end, rtg_portId, rtg_repIndex );}// {{{RME transition ':TOP:ReadyToBrew:Junction2:Brew'INLINE_METHODS void CUSprayer_Actor::transition2_Brew( const void * rtdata, CUControl_Sprayer::Base * rtport ){ // {{{USR sprayOn(); // }}}USR}// }}}RME// {{{RME transition ':TOP:Spraying:Junction2:BoilerEmpty'INLINE_METHODS void CUSprayer_Actor::transition3_BoilerEmpty( const void * rtdata, Boiler::Conjugate * rtport ){ // {{{USR // turn off boiler // open valve sprayOff(); // send brewing complete coffeeControl.BrewingComplete().send(); // }}}USR}// }}}RME// {{{RME transition ':TOP:Spraying:Junction3:NoPot'INLINE_METHODS void CUSprayer_Actor::transition4_NoPot( const void * rtdata, CUControl_Sprayer::Base * rtport ){ // {{{USR // stop spray sprayOff(); // }}}USR}// }}}RME// {{{RME transition ':TOP:PauseBrewing:Junction2:Pot'INLINE_METHODS void CUSprayer_Actor::transition5_Pot( const void * rtdata, CUControl_Sprayer::Base * rtport ){ // {{{USR // turn on stuff sprayOn(); // }}}USR}// }}}RME// {{{RME transition ':TOP:ReadyToBrew:Junction4:ready'INLINE_METHODS void CUSprayer_Actor::transition7_ready( const void * rtdata, CUControl_Sprayer::Base * rtport ){ // {{{USR coffeeControl.Ready().reply(); // }}}USR}// }}}RME// {{{RME transition ':TOP:Junction1:not_ready'INLINE_METHODS void CUSprayer_Actor::transition8_not_ready( const void * rtdata, CUControl_Sprayer::Base * rtport ){ // {{{USR coffeeControl.NotReady().reply(); // }}}USR}// }}}RMEINLINE_CHAINS void CUSprayer_Actor::chain1_Initialize( void ){ // transition ':TOP:Initial:Initialize' rtgChainBegin( 1, "Initialize" ); rtgTransitionBegin(); rtgTransitionEnd(); enterState( 2 );}INLINE_CHAINS void CUSprayer_Actor::chain8_not_ready( void ){ // transition ':TOP:Junction1:not_ready' rtgChainBegin( 1, "not_ready" ); exitToChainState( 1, rtg_parent_state ); rtgTransitionBegin(); transition8_not_ready( msg->data, (CUControl_Sprayer::Base *)msg->sap() ); rtgTransitionEnd(); processHistory();}INLINE_CHAINS void CUSprayer_Actor::chain9_IgnorePots( void ){ // transition ':TOP:Junction3:IgnorePots' rtgChainBegin( 1, "IgnorePots" ); exitToChainState( 1, rtg_parent_state ); rtgTransitionBegin(); rtgTransitionEnd(); processHistory();}INLINE_CHAINS void CUSprayer_Actor::chain6_BoilerNotEmpty( void ){ // transition ':TOP:NotBrewing:Junction5:BoilerNotEmpty' rtgChainBegin( 2, "BoilerNotEmpty" ); exitState( rtg_parent_state ); rtgTransitionBegin(); rtgTransitionEnd(); enterState( 5 );}INLINE_CHAINS void CUSprayer_Actor::chain3_BoilerEmpty( void ){ // transition ':TOP:Spraying:Junction2:BoilerEmpty' rtgChainBegin( 3, "BoilerEmpty" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition3_BoilerEmpty( msg->data, (Boiler::Conjugate *)msg->sap() ); rtgTransitionEnd(); enterState( 2 );}INLINE_CHAINS void CUSprayer_Actor::chain4_NoPot( void ){ // transition ':TOP:Spraying:Junction3:NoPot' rtgChainBegin( 3, "NoPot" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition4_NoPot( msg->data, (CUControl_Sprayer::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 4 );}INLINE_CHAINS void CUSprayer_Actor::chain5_Pot( void ){ // transition ':TOP:PauseBrewing:Junction2:Pot' rtgChainBegin( 4, "Pot" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition5_Pot( msg->data, (CUControl_Sprayer::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 3 );}INLINE_CHAINS void CUSprayer_Actor::chain7_ready( void ){ // transition ':TOP:ReadyToBrew:Junction4:ready' rtgChainBegin( 5, "ready" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition7_ready( msg->data, (CUControl_Sprayer::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 5 );}INLINE_CHAINS void CUSprayer_Actor::chain2_Brew( void ){ // transition ':TOP:ReadyToBrew:Junction2:Brew' rtgChainBegin( 5, "Brew" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition2_Brew( msg->data, (CUControl_Sprayer::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 3 );}void CUSprayer_Actor::rtsBehavior( int signalIndex, int portIndex ){ for( int stateIndex = getCurrentState(); ; stateIndex = rtg_parent_state[ stateIndex - 1 ] ) switch( stateIndex ) { case 1: // {{{RME state ':TOP' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: chain1_Initialize(); return; default: break; } break; case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_Sprayer::Base::rti_CheckReady: chain8_not_ready(); return; case CUControl_Sprayer::Base::rti_Pot: chain9_IgnorePots(); return; case CUControl_Sprayer::Base::rti_NoPot: chain9_IgnorePots(); return; default: break; } break; // }}}RME default: break; } unexpectedMessage(); return; // }}}RME case 2: // {{{RME state ':TOP:NotBrewing' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 1: // {{{RME port 'boiler' switch( signalIndex ) { case Boiler::Conjugate::rti_boilerNotEmpty: chain6_BoilerNotEmpty(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME case 3: // {{{RME state ':TOP:Spraying' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 1: // {{{RME port 'boiler' switch( signalIndex ) { case Boiler::Conjugate::rti_boilerEmpty: chain3_BoilerEmpty(); return; default: break; } break; // }}}RME case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_Sprayer::Base::rti_NoPot: chain4_NoPot(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME case 4: // {{{RME state ':TOP:PauseBrewing' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_Sprayer::Base::rti_Pot: chain5_Pot(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME case 5: // {{{RME state ':TOP:ReadyToBrew' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_Sprayer::Base::rti_CheckReady: chain7_ready(); return; case CUControl_Sprayer::Base::rti_Brew: chain2_Brew(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME default: unexpectedState(); return; }}const RTActor_class * CUSprayer_Actor::getActorData( void ) const{ return &CUSprayer_Actor::rtg_class;}const RTActor_class CUSprayer_Actor::rtg_class ={ (const RTActor_class *)0 , rtg_state_names , 5 , CUSprayer_Actor::rtg_parent_state , &CUSprayer , 0 , (const RTComponentDescriptor *)0 , 3 , CUSprayer_Actor::rtg_ports , 0 , (const RTLocalBindingDescriptor *)0 , 0 , (const RTFieldDescriptor *)0};const RTStateId CUSprayer_Actor::rtg_parent_state[] ={ 0 , 1 , 1 , 1 , 1};const RTPortDescriptor CUSprayer_Actor::rtg_ports[] ={ { "boiler" , (const char *)0 , &Boiler::Conjugate::rt_class , RTOffsetOf( CUSprayer_Actor, CUSprayer_Actor::boiler ) , 1 // cardinality , 1 , RTPortDescriptor::KindWired + RTPortDescriptor::NotificationDisabled + RTPortDescriptor::RegisterNotPermitted + RTPortDescriptor::VisibilityPublic } , { "reliefValve" , (const char *)0 , &ReliefValve::Conjugate::rt_class , RTOffsetOf( CUSprayer_Actor, CUSprayer_Actor::reliefValve ) , 1 // cardinality , 2 , RTPortDescriptor::KindWired + RTPortDescriptor::NotificationDisabled + RTPortDescriptor::RegisterNotPermitted + RTPortDescriptor::VisibilityPublic } , { "coffeeControl" , (const char *)0 , &CUControl_Sprayer::Base::rt_class , RTOffsetOf( CUSprayer_Actor, CUSprayer_Actor::coffeeControl ) , 1 // cardinality , 3 , RTPortDescriptor::KindWired + RTPortDescriptor::NotificationDisabled + RTPortDescriptor::RegisterNotPermitted + RTPortDescriptor::VisibilityPublic }};#undef SUPER// {{{RME tool 'OT::Cpp' property 'ImplementationEnding'// {{{USR// }}}USR// }}}RME// }}}RME
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -