📄 cufrontpanel.cpp
字号:
// {{{RME classifier 'Logical View::ControlUnits::CUFrontPanel'#if defined( PRAGMA ) && ! defined( PRAGMA_IMPLEMENTED )#pragma implementation "rtg/CUFrontPanel.h"#endif#include <RTSystem/AutoTestMarkI_x86VisualCpp60.h>#include <rtg/CUFrontPanel.h>// {{{RME tool 'OT::Cpp' property 'ImplementationPreface'// {{{USR// }}}USR// }}}RMEstatic const RTRelayDescriptor rtg_relays[] ={ { "indicatorLight" , &IndicatorLight::Conjugate::rt_class , 1 // cardinality } , { "brewButton" , &BrewButton::Conjugate::rt_class , 1 // cardinality } , { "coffeeControl" , &CUControl_FrontPanel::Base::rt_class , 1 // cardinality }};static RTActor * new_CUFrontPanel_Actor( RTController * _rts, RTActorRef * _ref ){ return new CUFrontPanel_Actor( _rts, _ref );}const RTActorClass CUFrontPanel ={ (const RTActorClass *)0 , "CUFrontPanel" , (RTVersionId)0 , 3 , rtg_relays , new_CUFrontPanel_Actor};static const char * const rtg_state_names[] ={ "TOP" , "Not_Brewing" , "Wait_for_start" , "Brewing"};#define SUPER RTActorCUFrontPanel_Actor::CUFrontPanel_Actor( RTController * rtg_rts, RTActorRef * rtg_ref ) : RTActor( rtg_rts, rtg_ref ){}CUFrontPanel_Actor::~CUFrontPanel_Actor( void ){}int CUFrontPanel_Actor::_followInV( RTBindingEnd & rtg_end, int rtg_portId, int rtg_repIndex ){ switch( rtg_portId ) { case 0: // indicatorLight if( rtg_repIndex < 1 ) { rtg_end.port = &indicatorLight; rtg_end.index = rtg_repIndex; return 1; } break; case 1: // brewButton if( rtg_repIndex < 1 ) { rtg_end.port = &brewButton; 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:Not_Brewing:Junction2:BrewRequested'INLINE_METHODS void CUFrontPanel_Actor::transition2_BrewRequested( const void * rtdata, BrewButton::Conjugate * rtport ){ // {{{USR coffeeControl.BrewRequested().send();#ifdef DEBUG cout << "(FrontPanel) Brew button pushed.\n" << flush;#endif // }}}USR}// }}}RME// {{{RME transition ':TOP:Wait_for_start:Junction2:Brew'INLINE_METHODS void CUFrontPanel_Actor::transition3_Brew( const void * rtdata, CUControl_FrontPanel::Base * rtport ){ // {{{USR indicatorLight.indicatorOff().send();#ifdef DEBUG cout << "(FrontPanel) Turning indicator light off.\n" << flush;#endif // }}}USR}// }}}RME// {{{RME transition ':TOP:Brewing:Junction2:BrewComplete'INLINE_METHODS void CUFrontPanel_Actor::transition4_BrewComplete( const void * rtdata, CUControl_FrontPanel::Base * rtport ){ // {{{USR indicatorLight.indicatorOn().send();#ifdef DEBUG cout << "(FrontPanel) Turning brew indicator light on.\n" << flush;#endif // }}}USR}// }}}RME// {{{RME transition ':TOP:Wait_for_start:Junction3:BrewDenied'INLINE_METHODS void CUFrontPanel_Actor::transition6_BrewDenied( const void * rtdata, CUControl_FrontPanel::Base * rtport ){ // {{{USR#ifdef DEBUG cout << "(FrontPanel) Sorry cannot brew... :(\n" << flush;#endif // }}}USR}// }}}RMEINLINE_CHAINS void CUFrontPanel_Actor::chain1_Initial( void ){ // transition ':TOP:Initial:Initial' rtgChainBegin( 1, "Initial" ); rtgTransitionBegin(); rtgTransitionEnd(); enterState( 2 );}INLINE_CHAINS void CUFrontPanel_Actor::chain5_IgnoreXtraButtonPush( void ){ // transition ':TOP:Junction1:IgnoreXtraButtonPush' rtgChainBegin( 1, "IgnoreXtraButtonPush" ); exitToChainState( 1, rtg_parent_state ); rtgTransitionBegin(); rtgTransitionEnd(); processHistory();}INLINE_CHAINS void CUFrontPanel_Actor::chain2_BrewRequested( void ){ // transition ':TOP:Not_Brewing:Junction2:BrewRequested' rtgChainBegin( 2, "BrewRequested" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition2_BrewRequested( msg->data, (BrewButton::Conjugate *)msg->sap() ); rtgTransitionEnd(); enterState( 3 );}INLINE_CHAINS void CUFrontPanel_Actor::chain3_Brew( void ){ // transition ':TOP:Wait_for_start:Junction2:Brew' rtgChainBegin( 3, "Brew" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition3_Brew( msg->data, (CUControl_FrontPanel::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 4 );}INLINE_CHAINS void CUFrontPanel_Actor::chain6_BrewDenied( void ){ // transition ':TOP:Wait_for_start:Junction3:BrewDenied' rtgChainBegin( 3, "BrewDenied" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition6_BrewDenied( msg->data, (CUControl_FrontPanel::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 2 );}INLINE_CHAINS void CUFrontPanel_Actor::chain4_BrewComplete( void ){ // transition ':TOP:Brewing:Junction2:BrewComplete' rtgChainBegin( 4, "BrewComplete" ); exitState( rtg_parent_state ); rtgTransitionBegin(); transition4_BrewComplete( msg->data, (CUControl_FrontPanel::Base *)msg->sap() ); rtgTransitionEnd(); enterState( 2 );}void CUFrontPanel_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_Initial(); return; default: break; } break; case 2: // {{{RME port 'brewButton' switch( signalIndex ) { case BrewButton::Conjugate::rti_brewButtonPushed: chain5_IgnoreXtraButtonPush(); return; case BrewButton::Conjugate::rti_brewButtonNotPushed: chain5_IgnoreXtraButtonPush(); return; default: break; } break; // }}}RME default: break; } unexpectedMessage(); return; // }}}RME case 2: // {{{RME state ':TOP:Not_Brewing' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 2: // {{{RME port 'brewButton' switch( signalIndex ) { case BrewButton::Conjugate::rti_brewButtonPushed: chain2_BrewRequested(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME case 3: // {{{RME state ':TOP:Wait_for_start' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_FrontPanel::Base::rti_Brew: chain3_Brew(); return; case CUControl_FrontPanel::Base::rti_BrewDenied: chain6_BrewDenied(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME case 4: // {{{RME state ':TOP:Brewing' switch( portIndex ) { case 0: switch( signalIndex ) { case 1: return; default: break; } break; case 3: // {{{RME port 'coffeeControl' switch( signalIndex ) { case CUControl_FrontPanel::Base::rti_BrewingComplete: chain4_BrewComplete(); return; default: break; } break; // }}}RME default: break; } break; // }}}RME default: unexpectedState(); return; }}const RTActor_class * CUFrontPanel_Actor::getActorData( void ) const{ return &CUFrontPanel_Actor::rtg_class;}const RTActor_class CUFrontPanel_Actor::rtg_class ={ (const RTActor_class *)0 , rtg_state_names , 4 , CUFrontPanel_Actor::rtg_parent_state , &CUFrontPanel , 0 , (const RTComponentDescriptor *)0 , 3 , CUFrontPanel_Actor::rtg_ports , 0 , (const RTLocalBindingDescriptor *)0 , 0 , (const RTFieldDescriptor *)0};const RTStateId CUFrontPanel_Actor::rtg_parent_state[] ={ 0 , 1 , 1 , 1};const RTPortDescriptor CUFrontPanel_Actor::rtg_ports[] ={ { "indicatorLight" , (const char *)0 , &IndicatorLight::Conjugate::rt_class , RTOffsetOf( CUFrontPanel_Actor, CUFrontPanel_Actor::indicatorLight ) , 1 // cardinality , 1 , RTPortDescriptor::KindWired + RTPortDescriptor::NotificationDisabled + RTPortDescriptor::RegisterNotPermitted + RTPortDescriptor::VisibilityPublic } , { "brewButton" , (const char *)0 , &BrewButton::Conjugate::rt_class , RTOffsetOf( CUFrontPanel_Actor, CUFrontPanel_Actor::brewButton ) , 1 // cardinality , 2 , RTPortDescriptor::KindWired + RTPortDescriptor::NotificationDisabled + RTPortDescriptor::RegisterNotPermitted + RTPortDescriptor::VisibilityPublic } , { "coffeeControl" , (const char *)0 , &CUControl_FrontPanel::Base::rt_class , RTOffsetOf( CUFrontPanel_Actor, CUFrontPanel_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 + -