EmbeddedMontiArc issueshttps://git.rwth-aachen.de/groups/monticore/EmbeddedMontiArc/-/issues2019-08-30T11:44:18+02:00https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/carlacomponents/-/issues/13Create concept to use ros messages with array field without handwritten wrapper2019-08-30T11:44:18+02:00Alexander David HellwigCreate concept to use ros messages with array field without handwritten wrapperCreate one or more concepts to add extra info to RosConnection tags that allows us to directly use array fields in emam.
Ideas: Cut or Pad to the disired lenght, pair of ports(one with lenght one with data), only allow with embeddedmonti...Create one or more concepts to add extra info to RosConnection tags that allows us to directly use array fields in emam.
Ideas: Cut or Pad to the disired lenght, pair of ports(one with lenght one with data), only allow with embeddedmontiarcdynamics: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/languages/EmbeddedMontiArcDynamics
You DONT need to implement these yethttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/carlacomponents/-/issues/12Create a wrapper emam component to reuse the autopilot component2019-09-25T15:44:15+02:00Alexander David HellwigCreate a wrapper emam component to reuse the autopilot componentThe model can be found here: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/utilities/EMAStudioBuilder/tree/master/EmbeddedMontiArcStudio/model/autopilot/de/rwth/armin/modeling/autopilot you can copy it into your project.
Main Com...The model can be found here: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/utilities/EMAStudioBuilder/tree/master/EmbeddedMontiArcStudio/model/autopilot/de/rwth/armin/modeling/autopilot you can copy it into your project.
Main Component: Autopilot.emam
First impression:
velocity: estimate from 2 or more datapoints of /carla/<ROLE NAME>/odometry OR use /carla/objects OR find other topic containing the velocity
x,y, compas: /carla/<ROLE NAME>/odometry
currentEngine,currentStearing,currentBrakes:?, possibly calculate/hard set in the wrapper/heurisic
trajectory_lenght,trajectory_x,trajectory_y: Use carla_waypoint_publisher: https://github.com/carla-simulator/ros-bridge/blob/master/carla_waypoint_publisher/README.md
You will need to writte a small python or c++ ros program that converts the nav_msgs.Path Message to the required format and outputs it on 3 new topicsHelge Simon HartlebHelge Simon Hartlebhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/carlacomponents/-/issues/11Check if Collision Data is available in ROS Bridge2019-08-12T17:07:27+02:00Alexander David HellwigCheck if Collision Data is available in ROS BridgeSuggestions:
Add print to https://github.com/carla-simulator/ros-bridge/blob/29003493c569e271801e48214863e3da054eec7d/carla_ros_bridge/src/carla_ros_bridge/collision_sensor.py#L43Suggestions:
Add print to https://github.com/carla-simulator/ros-bridge/blob/29003493c569e271801e48214863e3da054eec7d/carla_ros_bridge/src/carla_ros_bridge/collision_sensor.py#L43Sven0171Philipp HeliosHelge Simon HartlebSven0171https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/14Add to CI: Compile Adapter example2019-07-09T18:49:07+02:00Alexander David HellwigAdd to CI: Compile Adapter exampleCompile the example adapter with docker and add it to the CICompile the example adapter with docker and add it to the CIMarkus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/13Add basic generator structure to project2019-07-09T18:48:52+02:00Alexander David HellwigAdd basic generator structure to projectReference: https://freemarker.apache.org/docs/index.html
See:
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/GeneratorRosCpp.java#L69
ht...Reference: https://freemarker.apache.org/docs/index.html
See:
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/GeneratorRosCpp.java#L69
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/template/RosCppTemplates.java
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/tree/master/src/main/resources/de/monticore/lang/monticar/generator/roscpp/templateMarkus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/12Add MiddlewareSymbol to EmbeddedMontiArc2019-07-09T11:57:59+02:00Alexander David HellwigAdd MiddlewareSymbol to EmbeddedMontiArcDirectory: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/languages/EmbeddedMontiArc/tree/master/src/main/java/de/monticore/lang/embeddedmontiarc/tagging/middleware
It should contain all information you need to generate a publishe...Directory: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/languages/EmbeddedMontiArc/tree/master/src/main/java/de/monticore/lang/embeddedmontiarc/tagging/middleware
It should contain all information you need to generate a publisher/subscriber that connects a topic/service to a port.
It should be similar RosConnectionSymbol(e.g. extends MiddlewareSymbol)
Also adapt EMAPortSymbol and EMAPortInstanceSymbol(see isRosPort)
Remember to create a merge request and assigne it to meMarkus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/11Enable multiple callbacks in one adapter2019-07-12T11:48:55+02:00Alexander David HellwigEnable multiple callbacks in one adapterIdea: Encapsulate callback in Class:
Create Class with callback and add pointer to component in constructor. Create an object of this class in the init method of the adapter and register with middleware
If you can think of other alternat...Idea: Encapsulate callback in Class:
Create Class with callback and add pointer to component in constructor. Create an object of this class in the init method of the adapter and register with middleware
If you can think of other alternatives, feel free to implement them insteadMarkus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/10Change adapter example to set values of component on callback2019-06-13T17:47:50+02:00Alexander David HellwigChange adapter example to set values of component on callbackE.g. someware in SomeipAdapter_tests_a_compA::on_message:
`component->rosIn = dataFromMessage;`E.g. someware in SomeipAdapter_tests_a_compA::on_message:
`component->rosIn = dataFromMessage;`Markus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/-/issues/9Change adapter example to publish values from the component2019-06-13T17:32:07+02:00Alexander David HellwigChange adapter example to publish values from the componentE.g. in https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/blob/8-handwrite-a-some-ip-adapter/someip_adapter/SomeipAdapter_tests_a_compA.cpp#L61 :
`double d = component->rosOut`;E.g. in https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2someip/blob/8-handwrite-a-some-ip-adapter/someip_adapter/SomeipAdapter_tests_a_compA.cpp#L61 :
`double d = component->rosOut`;Markus Georg BendelMarkus Georg Bendelhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/14Add to CI: Compile Adapter example2019-07-01T21:38:02+02:00Alexander David HellwigAdd to CI: Compile Adapter exampleCompile the example adapter with docker and add it to the CICompile the example adapter with docker and add it to the CIGeorg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/13Add basic generator structure to project2019-07-01T13:18:20+02:00Alexander David HellwigAdd basic generator structure to projectReference: https://freemarker.apache.org/docs/index.html
See:
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/GeneratorRosCpp.java#L69
ht...Reference: https://freemarker.apache.org/docs/index.html
See:
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/GeneratorRosCpp.java#L69
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/blob/master/src/main/java/de/monticore/lang/monticar/generator/roscpp/template/RosCppTemplates.java
https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2RosCpp/tree/master/src/main/resources/de/monticore/lang/monticar/generator/roscpp/templateGeorg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/12Add MiddlewareSymbol to EmbeddedMontiArc2019-06-26T14:01:33+02:00Alexander David HellwigAdd MiddlewareSymbol to EmbeddedMontiArcDirectory: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/languages/EmbeddedMontiArc/tree/master/src/main/java/de/monticore/lang/embeddedmontiarc/tagging/middleware
It should contain all information you need to generate a publishe...Directory: https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/languages/EmbeddedMontiArc/tree/master/src/main/java/de/monticore/lang/embeddedmontiarc/tagging/middleware
It should contain all information you need to generate a publisher/subscriber that connects a topic/service to a port.
It should be similar RosConnectionSymbol(e.g. extends MiddlewareSymbol)
Also adapt EMAPortSymbol and EMAPortInstanceSymbol(see isRosPort)
Remember to create a merge request and assigne it to meGeorg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/11Enable multiple callbacks in one adapter2019-06-17T19:14:03+02:00Alexander David HellwigEnable multiple callbacks in one adapterIdea: Encapsulate callback in Class:
Create Class with callback and add pointer to component in constructor. Create an object of this class in the init method of the adapter and register with middleware
If you can think of other alternat...Idea: Encapsulate callback in Class:
Create Class with callback and add pointer to component in constructor. Create an object of this class in the init method of the adapter and register with middleware
If you can think of other alternatives, feel free to implement them insteadGeorg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/10Change adapter example to set values of component on callback2019-06-17T19:08:57+02:00Alexander David HellwigChange adapter example to set values of component on callbackE.g. someware in message_arrived:
`component->rosIn = dataFromMessage;`E.g. someware in message_arrived:
`component->rosIn = dataFromMessage;`Georg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/emam2mqtt/-/issues/9Add Env variable to specify where mqtt is installed2019-06-14T12:30:29+02:00Alexander David HellwigAdd Env variable to specify where mqtt is installedGeorg VinogradovGeorg Vinogradovhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/simulators/server/-/issues/28Set Charging Station as new target2019-10-09T10:50:39+02:00Simon KißmannSet Charging Station as new targetImplement a method that saves the current target and sets the nearest charging station as the new target to navigate to. Once the vehicle is fully charged and can leave the station, the saved original target is set as the new target.Implement a method that saves the current target and sets the nearest charging station as the new target to navigate to. Once the vehicle is fully charged and can leave the station, the saved original target is set as the new target.Simon KißmannSimon Kißmannhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/simulators/server/-/issues/27Flag for pausing the autopilot2019-10-09T10:50:53+02:00Simon KißmannFlag for pausing the autopilotSet Flag (boolean charging) that pauses the autopilot (and the car) while in the charging station. Either set by the autopilot or charging station. Unchecked when charging process is finished (battery charge = 100%?)Set Flag (boolean charging) that pauses the autopilot (and the car) while in the charging station. Either set by the autopilot or charging station. Unchecked when charging process is finished (battery charge = 100%?)Simon KißmannSimon Kißmannhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Cpp/-/issues/31Issues of dynamic port and connect2019-06-06T10:56:43+02:00Wei XuIssues of dynamic port and connectProblems occurs when the dynamic port and connect are applied in the Autopilot model.<br>
1. Dynamic ports free problem <br>
After every execution of Autopilot model, dynamic input and output ports should be free by the `free_#port_n...Problems occurs when the dynamic port and connect are applied in the Autopilot model.<br>
1. Dynamic ports free problem <br>
After every execution of Autopilot model, dynamic input and output ports should be free by the `free_#port_name#` method in Autopilot.h, which is called in AutopilotAdapter.cpp. <br>
For simple component like:<br>
```js
dynamic component Autopilot {
port
dynamic in Q input[0:32],
dynamic out Q output[0:32];
@input::connect{
connect input[?] -> output[?];
}
}
```
Free of dynamic inputs and outputs works, when we use the `free_input` method of autopilot.h in AutopilotAdapter.cpp, like follows:<br>
```js
bool free_input(int input_indexref)
{
if( (input_indexref < 0) || (32 <= input_indexref) || (!__input_connected[input_indexref]) ){ return false;}
__input_free_request.push(input_indexref);
dynamicfree();
return true;
}
```
It‘s because in the `dynamicfree()` method, `__output_free_request` will be pushed and then free, when it connects to in the dynamic input port.
```js
void __event_body_free_EventHandler_1_(){
while(input_has_free_request()){
int _input_dynPortID = input_free_request_front();
for(long i = __event_connects_EventHandler_1_.size()-1; i >= 0; --i){
int* _connected_idxs = __event_connects_EventHandler_1_.at(i);
if( (_input_dynPortID == _connected_idxs[0]) ){
int _output_dynPortID = _connected_idxs[1]; __output_free_request.push(_output_dynPortID);
if(__parent != NULL){__parent_dynamic(__parent, false, true);}
if(__output_free_request.front() == _output_dynPortID){ __output_free_request.pop(); }
dynamicconnect_remove(&__dynamic_double_connect, NULL, &(input[_input_dynPortID]), &(output[_output_dynPortID]));
__event_connects_EventHandler_1_.erase(__event_connects_EventHandler_1_.begin()+i);
__output_connected[_output_dynPortID] = false;
free(_connected_idxs);
}
}
}
}
```
But when component is defined as follows:
```js
dynamic component Autopilot {
port
dynamic in Q input[0:32],
dynamic out Q output[0:32];
instance Autopilot1 ap1;
@ input::connect{
connect input[?] -> ap1.input[?];
}
@ ap1.output1::connect{
connect ap1.output1[?] -> output[?];
}
}
```
```js
dynamic component Autopilot1{
port
dynamic in Q input[0:32],
dynamic out Q output1[0:32],
dynamic out Q output2[0:32];
@ input::connect{}
implementation Math{
for i = 1:32
if is_connected(input,i)
if ports_connect(output1, i, input(i))
output1(i) = input(i);
end
if ports_connect(output2, i, input(i))
output2(i) = input(i);
end
end
end
}
}
```
Free of dynamic output ports depends on the free event:
```js
void __event_body_free_EventHandler_3_(){
while(ap1.output1_has_free_request()){
int _ap1_output1_dynPortID = ap1.output1_free_request_front();
for(long i = __event_connects_EventHandler_3_.size()-1; i >= 0; --i){
int* _connected_idxs = __event_connects_EventHandler_3_.at(i);
if( (_ap1_output1_dynPortID == _connected_idxs[0]) ){
int _output_dynPortID = _connected_idxs[1]; __output_free_request.push(_output_dynPortID);
if(__parent != NULL){__parent_dynamic(__parent, false, true);}
if(__output_free_request.front() == _output_dynPortID){ __output_free_request.pop(); }
dynamicconnect_remove(&__dynamic_double_connect, NULL, &(ap1.output1[_ap1_output1_dynPortID]), &(output[_output_dynPortID]));
__event_connects_EventHandler_3_.erase(__event_connects_EventHandler_3_.begin()+i);
__output_connected[_output_dynPortID] = false;
free(_connected_idxs);
}
}
}
}
```
But, the `ap1.output1_has_free_request()` is never pushed in instance ap1, because there is no connect between the dynamic input ports and output1 ports in instance ap1, so dynamic output ports of Autopilot can not be free correctly.<br>
When we use the ports_free method in Autopilot1 component:
```js
dynamic component Autopilot1{
port
dynamic in Q input[0:32],
dynamic out Q output1[0:32],
dynamic out Q output2[0:32];
@ input::connect{}
implementation Math{
for i = 1:32
if is_connected(input,i)
if ports_connect(output1, i, input(i))
output1(i) = input(i);
end
Z r = ports_free(output1,i);
if ports_connect(output2, i, input(i))
output2(i) = input(i);
end
Z r = ports_free(output2,i);
end
end
}
}
```
The free request can be pushed into `ap1.output1_has_free_request()` with `__ports_free_1` method:
```js
bool __ports_free_1(int idx0){
if((idx0 < 0) || (32 <= idx0) || (!__output1_connected[idx0])){return false;}__output1_free_request.push(idx0);
if(__parent != NULL){__parent_dynamic(__parent, false, true);}
__output1_connected[idx0] = false;
return true;
}
```
Problem is that `__output1_connected[idx0]` can not be set to false in this method, it means this port is free now and next connect will occupy this port, which leads to error that no matter how many inputs request there is just one output connect request.<br>
Also, when component like follows, there are two Autopilot1 instances:
```js
dynamic component Autopilot {
port
dynamic in Q input[0:32],
dynamic out Q output[0:32];
instance Autopilot1 ap1,ap2;
@ input::connect{
connect input[?] -> ap1.input[?];
}
@ ap1.output1::connect{
connect ap1.output1[?] -> ap2.input[?];
}
@ ap2.output1::connect{
connect ap2.output1[?] -> output[?];
}
}
```
```js
dynamic component Autopilot1{
port
dynamic in Q input[0:32],
dynamic out Q output1[0:32],
dynamic out Q output2[0:32];
@ input::connect{}
implementation Math{
for i = 1:32
if is_connected(input,i)
if ports_connect(output1, i, input(i))
output1(i) = input(i);
end
Z r = ports_free(output1,i);
if ports_connect(output2, i, input(i))
output2(i) = input(i);
end
Z r = ports_free(output2,i);
end
end
}
}
```
Free of dynamic output ports depends on the free event:
```js
void __event_body_free_EventHandler_4_(){
while(ap2.output1_has_free_request()){
int _ap2_output1_dynPortID = ap2.output1_free_request_front();
for(long i = __event_connects_EventHandler_4_.size()-1; i >= 0; --i){
int* _connected_idxs = __event_connects_EventHandler_4_.at(i);
if( (_ap2_output1_dynPortID == _connected_idxs[0]) ){
int _output_dynPortID = _connected_idxs[1]; __output_free_request.push(_output_dynPortID);
if(__parent != NULL){__parent_dynamic(__parent, false, true);}
if(__output_free_request.front() == _output_dynPortID){ __output_free_request.pop(); }
dynamicconnect_remove(&__dynamic_double_connect, NULL, &(ap2.output1[_ap2_output1_dynPortID]), &(output[_output_dynPortID]));
__event_connects_EventHandler_4_.erase(__event_connects_EventHandler_4_.begin()+i);
__output_connected[_output_dynPortID] = false;
free(_connected_idxs);
}
}
}
}
```
Free of dynamic output port in Autopilot depends on `ap2.output1_has_free_request()`, although ports_free method is defined in Autopilot1, there is no `__ports_free#number#` method in generated autopilot_ap2.h file. It means that ports_free method can just be converted in the outer layer of the whole component.<br>
The structure like this problem occurs component is very important in the autopilot. Because there are several subcomponents, which all need the content of dynamic input. But once dynamic input port connects to the dynamic port in sub-component, connect request of dynamic input will be pop, so we need the component like Autopilot1, which aims to copy the connect request of dynamic input port.<br>
When the dynamic port in Autopilot can not be free, after several frames of simulation, all ports will be occupied and over flow. JVM is broken down and shows RUNTIME error.
2. Problems in instance ports<br>
When the structure of Autopilot Model like follows:
```js
dynamic component Autopilot {
port
dynamic in Q input[0:32],
dynamic out Q output[0:32];
instance Autopilot1 ap1[0:32];
instance Autopilot2 ap2[0:32];
instance Autopilot3 ap3;
@ input::connect{
connect input[?] -> ap1[?].input;
connect ap1[?].output1 -> ap3.input1[?];
connect ap1[?].output2 -> ap3.input2[?];
connect input[?] -> ap2[?].input;
connect ap2[?].output3 -> ap3.input3[?];
connect ap2[?].output4 -> ap3.input4[?];
}
@ ap3.output1::connect{
connect ap3.output1[?] -> output[?];
}
@ ap3.output2::connect{
connect ap3.output2[?] -> output[?];
}
}
```
```js
component Autopilot1{
port
in Q input,
out Q output1,
out Q output2;
implementation Math{
output1 = input;
output2 = input;
}
}
```
```js
component Autopilot2{
port
in Q input,
out Q output3,
out Q output4;
implementation Math{
output3 = input;
output4 = input;
}
}
```
```js
dynamic component Autopilot4{
port
dynamic in Q input1[0:32],
dynamic in Q input2[0:32],
dynamic out Q output[0:32];
@input1::connect{}
@input2::connect{}
implementation Math{
for i = 1:32
if is_connected(input1,i)&&is_connected(input2,i)
if ports_connect(output,i,42.123)
output(i) = input1(i) + input2(i);
end
end
end
}
}
```
```js
dynamic component Autopilot3{
port
dynamic in Q input1[0:32],
dynamic in Q input2[0:32],
dynamic in Q input3[0:32],
dynamic in Q input4[0:32],
dynamic out Q output1[0:32],
dynamic out Q output2[0:32];
instance Autopilot4 ap4,ap5;
@ input1::connect{
connect input1[?] -> ap4.input1[?];
}
@ input2::connect{
connect input2[?] -> ap4.input2[?];
}
@ ap4.output::connect{
connect ap4.output[?] -> output1[?];
}
@ input3::connect{
connect input3[?] -> ap5.input1[?];
}
@ input4::connect{
connect input4[?] -> ap5.input2[?];
}
@ ap5.output::connect{
connect ap5.output[?] -> output2[?];
}
}
```
The structure can be shown in a Figure:![Structure](/uploads/4e347387c743ee3060d235ac372904c3/Structure.png)
In the generated c++ file of autopilot, there is a undefined connect method `ap3.connect_input1_input2_input3_input4`, which is called in autopilot.h. This leads to the error when c++ files are compiled to dll file.
```js
void __event_body_EventHandler_9_()
{
while(__event_condition_EventHandler_9_()){
int* _connected_idxs = (int *)calloc(7, sizeof(int));
int _input_dynPortID = __input_connect_request.front(); __input_connect_request.pop(); _connected_idxs[0] = _input_dynPortID;
int _ap2_dynINSTID = dynamicconnect(32, __ap2_connected); if( _ap2_dynINSTID < 0 ){ free(_connected_idxs); return; } _connected_idxs[1] = _ap2_dynINSTID;
int _ap1_dynINSTID = dynamicconnect(32, __ap1_connected); if( _ap1_dynINSTID < 0 ){ free(_connected_idxs); return; } _connected_idxs[2] = _ap1_dynINSTID;
int _ap3_input1_dynPortID = -1;
int _ap3_input2_dynPortID = -1;
int _ap3_input3_dynPortID = -1;
int _ap3_input4_dynPortID = -1;
if(!ap3.connect_input1_input2_input3_input4(&_ap3_input1_dynPortID, ap1[_ap1_dynINSTID].output1, &_ap3_input2_dynPortID, ap1[_ap1_dynINSTID].output2, &_ap3_input3_dynPortID, ap2[_ap2_dynINSTID].output3, &_ap3_input4_dynPortID, ap2[_ap2_dynINSTID].output4)){ free(_connected_idxs); return ;}
_connected_idxs[3] = _ap3_input1_dynPortID;_connected_idxs[4] = _ap3_input2_dynPortID;_connected_idxs[5] = _ap3_input3_dynPortID;_connected_idxs[6] = _ap3_input4_dynPortID;
__dynamic_double_connect.push_back({&ap1[_ap1_dynINSTID], &(input[_input_dynPortID]), &(ap1[_ap1_dynINSTID].input)});
__dynamic_double_connect.push_back({&ap3, &(ap1[_ap1_dynINSTID].output1), &(ap3.input1[_ap3_input1_dynPortID])});
__dynamic_double_connect.push_back({&ap3, &(ap1[_ap1_dynINSTID].output2), &(ap3.input2[_ap3_input2_dynPortID])});
__dynamic_double_connect.push_back({&ap2[_ap2_dynINSTID], &(input[_input_dynPortID]), &(ap2[_ap2_dynINSTID].input)});
__dynamic_double_connect.push_back({&ap3, &(ap2[_ap2_dynINSTID].output3), &(ap3.input3[_ap3_input3_dynPortID])});
__dynamic_double_connect.push_back({&ap3, &(ap2[_ap2_dynINSTID].output4), &(ap3.input4[_ap3_input4_dynPortID])});
__event_connects_EventHandler_9_.push_back(_connected_idxs);
}
}
```
3. Port free in Streamtest<br>
Dynamic ports can not be free in current Streamtest project, when dynamic component is tested with TestWrapper and Stream File. Because free_methods of dynamic component are not called. So, the length of Stream data can just be one. Otherwise, it leads to error when tests second group of stream data, the reason is that last used ports are not free.Evgeny KusmenkoEvgeny Kusmenkohttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/applications/mnistcalculator/-/issues/6Create integration test for tensorflow2019-09-26T14:00:35+02:00Evgeny KusmenkoCreate integration test for tensorflow- create integration test
- add information about tensorflow backend in accordance with the other backends- create integration test
- add information about tensorflow backend in accordance with the other backendsFelix HermsenFelix Hermsenhttps://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/-/issues/11Dependency Issue2020-10-29T16:21:54+01:00Evgeny KusmenkoDependency Issuemvn clean install -s settings.xml can't get monticar commons dependencymvn clean install -s settings.xml can't get monticar commons dependency