[62] | 1 | /* |
---|
| 2 | * $Id: Component_signal_internal.cpp 113 2009-04-14 18:39:12Z rosiere $ |
---|
| 3 | * |
---|
[113] | 4 | * [ Description ] |
---|
[62] | 5 | * |
---|
| 6 | */ |
---|
| 7 | |
---|
| 8 | #include "Behavioural/include/Component.h" |
---|
| 9 | |
---|
| 10 | namespace morpheo { |
---|
| 11 | namespace behavioural { |
---|
| 12 | |
---|
| 13 | #undef FUNCTION |
---|
| 14 | #define FUNCTION "Component::signal_internal" |
---|
| 15 | Signal * Component::signal_internal (Entity * entity_productor, |
---|
[113] | 16 | Signal * signal_productor, |
---|
| 17 | Entity * entity_consumer, |
---|
| 18 | Signal * signal_consumer) |
---|
[62] | 19 | { |
---|
| 20 | log_printf(FUNC,Behavioural,FUNCTION,"Begin"); |
---|
| 21 | |
---|
[113] | 22 | bool productor_is_cosimulation = usage_is_set(entity_productor->get_usage(),USE_COSIMULATION); |
---|
| 23 | bool consumer_is_cosimulation = usage_is_set(entity_consumer ->get_usage(),USE_COSIMULATION); |
---|
| 24 | bool is_cosimulation = consumer_is_cosimulation or productor_is_cosimulation; |
---|
| 25 | if (productor_is_cosimulation and consumer_is_cosimulation) |
---|
| 26 | throw ERRORMORPHEO (FUNCTION,toString(_("Entity \"%s\" and Entity \"%s\" use both cosimulation. It's not supported.\n"),entity_productor->get_name().c_str(),entity_consumer->get_name().c_str())); |
---|
| 27 | |
---|
[62] | 28 | // create name of internal's signal |
---|
[113] | 29 | Entity * entity = (consumer_is_cosimulation)?entity_consumer:entity_productor; |
---|
| 30 | Signal * signal = (consumer_is_cosimulation)?signal_consumer:signal_productor; |
---|
| 31 | |
---|
| 32 | std::string str_entity = entity->get_name(); |
---|
| 33 | std::string str_signal = signal->get_name(); |
---|
[62] | 34 | |
---|
[113] | 35 | // UpperCase (str_entity); |
---|
| 36 | // UpperCase (str_signal); |
---|
[62] | 37 | |
---|
[113] | 38 | std::string name_internal = (is_cosimulation)?str_signal:("internal_"+str_entity+"_"+str_signal); |
---|
[62] | 39 | |
---|
| 40 | // test if internal's signal exist ... else, create |
---|
| 41 | Signal * signal_internal = _entity->find_signal (name_internal); |
---|
| 42 | |
---|
| 43 | if (signal_internal == NULL) |
---|
| 44 | { |
---|
| 45 | // signal don't exist ... create |
---|
| 46 | log_printf(TRACE,Behavioural,FUNCTION, " * Create an internal signal : \"%s\".",name_internal.c_str()); |
---|
| 47 | |
---|
| 48 | Interface * interface = _entity->find_interface(""); |
---|
| 49 | |
---|
| 50 | if (interface == NULL) |
---|
[113] | 51 | throw ERRORMORPHEO (FUNCTION,toString(_("Component \"%s\", doesn't have an interface \"\".\n"),_entity->get_name().c_str())); |
---|
| 52 | |
---|
| 53 | // std::string signame = entity->get_name()+"_"+signal->get_name(); |
---|
| 54 | std::string signame = name_internal; |
---|
| 55 | type_info_t type_info = signal->get_type_info(); |
---|
| 56 | |
---|
[62] | 57 | // Signal's creation |
---|
[113] | 58 | switch (type_info) |
---|
[62] | 59 | { |
---|
[113] | 60 | case BOOL : interface->set_signal_internal<bool >(signame, signal->get_size()); break; |
---|
| 61 | case UINT8_T : interface->set_signal_internal<uint8_t >(signame, signal->get_size()); break; |
---|
| 62 | case UINT16_T : interface->set_signal_internal<uint16_t>(signame, signal->get_size()); break; |
---|
| 63 | case UINT32_T : interface->set_signal_internal<uint32_t>(signame, signal->get_size()); break; |
---|
| 64 | case UINT64_T : interface->set_signal_internal<uint64_t>(signame, signal->get_size()); break; |
---|
| 65 | default :throw (ErrorMorpheo ("Signal \""+name_internal+"\" : type unknow.")); |
---|
[62] | 66 | } |
---|
| 67 | |
---|
| 68 | signal_internal = _entity->find_signal (name_internal); |
---|
| 69 | |
---|
| 70 | if (signal_internal == NULL) |
---|
| 71 | throw (ErrorMorpheo ("Signal \""+name_internal+"\" : error in creation of internal's signal.")); |
---|
| 72 | } |
---|
| 73 | |
---|
| 74 | log_printf(FUNC,Behavioural,FUNCTION,"End"); |
---|
| 75 | |
---|
| 76 | return signal_internal; |
---|
| 77 | }; |
---|
| 78 | |
---|
| 79 | }; // end namespace behavioural |
---|
| 80 | }; // end namespace morpheo |
---|
| 81 | |
---|