/* * $Id: Signal_connect.cpp 131 2009-07-08 18:40:08Z rosiere $ * * [ Description ] * */ #include "Behavioural/include/Signal.h" namespace morpheo { namespace behavioural { #undef FUNCTION #define FUNCTION "Signal::connect" void Signal::connect (Signal * signal_dest) { log_printf(FUNC,Behavioural,FUNCTION,"Begin"); log_printf(TRACE,Behavioural,FUNCTION," * Connection between : %s with %s",get_name().c_str(),signal_dest->get_name().c_str()); // log_printf(ALL,Behavioural,FUNCTION," * source"); // log_printf(ALL,Behavioural,FUNCTION," * direction : %s",toString(_direction).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * sc_signal : %.8x",_sc_signal); // log_printf(ALL,Behavioural,FUNCTION," * type_info : %s",toString(_type_info).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * destination"); // log_printf(ALL,Behavioural,FUNCTION," * direction : %s",toString(signal_dest->_direction).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * sc_signal : %.8x",signal_dest->_sc_signal); // log_printf(ALL,Behavioural,FUNCTION," * type_info : %s",toString(signal_dest->_type_info).c_str()); TEST_PTR( _sc_signal); TEST_PTR(signal_dest->_sc_signal); if ((_direction == IN ) and (signal_dest->_direction == IN )) { switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } } else { if ((_direction == IN ) and (signal_dest->_direction == OUT)) { switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } } else { if ((_direction == IN ) and (signal_dest->_direction == INTERNAL)) { switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } } else { #ifdef SYSTEMCASS_SPECIFIC if ((_direction == OUT) and (signal_dest->_direction == IN )) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else #endif { if ((_direction == OUT) and (signal_dest->_direction == OUT)) { switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } } else { if ((_direction == OUT) and (signal_dest->_direction == INTERNAL)) { switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } } // else // if ((_direction == INTERNAL) and (signal_dest->_direction == IN )) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } // else // if ((_direction == INTERNAL ) and (signal_dest->_direction == OUT)) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } // else // if ((_direction == INTERNAL ) and (signal_dest->_direction == INTERNAL)) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } else { throw (ErrorMorpheo (" Signal \""+_name+"\" can't been connected with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(_direction)+" with "+toString(signal_dest->_direction)+").")); } } } } } } log_printf(FUNC,Behavioural,FUNCTION,"End"); }; }; // end namespace behavioural }; // end namespace morpheo