Skip to content
Snippets Groups Projects
Commit bd4fa390 authored by Thomas Böhm's avatar Thomas Böhm
Browse files

Fixed generated files and refactored some methods.

parent 3cd5ff88
No related branches found
No related tags found
No related merge requests found
......@@ -22,8 +22,6 @@ import static org.fortiss.af3.platform.raspberry.utils.RaspberryUtils.getEcuForC
import static org.fortiss.af3.platform.raspberry.utils.RaspberryUtils.getTargetComponent;
import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.findElementById;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -38,6 +36,7 @@ import org.fortiss.af3.generator.common.model.source.SourcePackage;
import org.fortiss.af3.platform.language.executable.TransmissionUnitExecutableBase;
import org.fortiss.af3.platform.model.ExecutionUnit;
import org.fortiss.af3.platform.model.TransmissionUnit;
import org.fortiss.af3.platform.model.impl.PlatformConnectorUnitImpl;
import org.fortiss.af3.platform.raspberry.generated.files.RaspberryFileGeneration;
import org.fortiss.af3.platform.raspberry.model.annotation.PeripheralAddress;
import org.fortiss.af3.platform.raspberry.model.annotation.PinNumber;
......@@ -77,6 +76,19 @@ public class BusExecutable extends TransmissionUnitExecutableBase<TransmissionUn
* message.
*/
public void findBusSignals(int deploymentID, Component topComponent, SourcePackage pack) {
createProtoFile(deploymentID, topComponent, pack);
createHeaderFile(pack, "sensors");
createHeaderFile(pack, "actuators");
createFilesPeripheralDetails(pack);
}
/**
* Finds Information about Signals that are transmitted over the Bus and form fields of the
* message.
*/
private void createProtoFile(int deploymentID, Component topComponent, SourcePackage pack) {
String messageString = "message msg { \n";
int counter = 0;
Deployment currentDeployment =
......@@ -109,8 +121,8 @@ public class BusExecutable extends TransmissionUnitExecutableBase<TransmissionUn
}
messageString +=
"\t optional " + prtType + " " +
((OutputPort)port).getName() + "= " + counter +
";\n";
((OutputPort)port).getName().toLowerCase() +
"= " + counter + ";\n";
}
}
}
......@@ -120,9 +132,6 @@ public class BusExecutable extends TransmissionUnitExecutableBase<TransmissionUn
}
messageString += "}";
createFile(pack, messageString, "message.proto");
createSensorHeaderFile(pack);
createActuatorHeaderFile(pack);
createFilesPeripheralDetails(pack);
}
/** Determine Sensors, Actuators their IDs and PinNumbers. */
......@@ -132,102 +141,73 @@ public class BusExecutable extends TransmissionUnitExecutableBase<TransmissionUn
String actuatorList = "#include \"actuators.h\" \n\n";
actuatorList += "actuators act[] = \n{\n";
List<SensorInImpl> sens = new ArrayList<SensorInImpl>();
List<ActuatorOutImpl> acts = new ArrayList<ActuatorOutImpl>();
String componentsList = "#ifndef __COMPONENTS_H\n";
componentsList += "#define __COMPONENTS_H\n\n";
EList<IHierarchicElement> el = modelElement.getContainer().getContainedElements();
for(IHierarchicElement ce : el) {
EList<IConnector> conList = ce.getConnectors();
for(IConnector conn : conList) {
if(conn instanceof SensorInImpl) {
sens.add((SensorInImpl)conn);
sensorList += addSensorSpecsToList((SensorInImpl)conn);
componentsList +=
componentDefine("SensorIn", ((PlatformConnectorUnitImpl)conn).getId());
}
if(conn instanceof ActuatorOutImpl) {
acts.add((ActuatorOutImpl)conn);
actuatorList += addSensorSpecsToList((ActuatorOutImpl)conn);
componentsList +=
componentDefine("ActuatorOut",
((PlatformConnectorUnitImpl)conn).getId());
}
}
}
sensorList = addSensorSpecsToList(sensorList, sens);
actuatorList = addActuatorSpecsToList(actuatorList, acts);
sensorList += "\n };";
actuatorList += "\n };";
sensorList = fixEnding(sensorList);
actuatorList = fixEnding(actuatorList);
componentsList += "\n#endif";
createFile(pack, sensorList, "sensors.c");
createFile(pack, actuatorList, "actuators.c");
createFile(pack, componentsList, "components.h");
}
private String fixEnding(String s) {
return s.substring(0, s.length() - ",\n".length()) + "\n};";
}
/** Add specification of peripheral to the respective list of Sensors. */
private String addSensorSpecsToList(String sensorList, List<SensorInImpl> sens) {
for(SensorInImpl sen : sens) {
int Id = sen.getId();
HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("Id", Id);
EList<IModelElementSpecification> specs = sen.getSpecifications();
for(IModelElementSpecification spec : specs) {
if(spec instanceof PinNumber) {
int pinNr = ((PinNumber)spec).getPinNumber();
hmap.put("pinNr", pinNr);
}
if(spec instanceof PeripheralAddress) {
int address = ((PeripheralAddress)spec).getPeripheralAddress();
hmap.put("address", address);
}
}
sensorList +=
" {" + hmap.get("Id") + ", " + hmap.get("pinNr") + ", " + hmap.get("address") +
"} ";
if(sen.getId() != sens.get(sens.size() - 1).getId())
sensorList += ", \n";
}
return sensorList;
private String componentDefine(String s, int value) {
return "#define " + s + "_ID_" + value + " " + value + "\n";
}
/** Add specification of peripheral to the respective list of Sensors. */
private String addActuatorSpecsToList(String actuatorList, List<ActuatorOutImpl> acts) {
for(ActuatorOutImpl act : acts) {
int Id = act.getId();
HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("Id", Id);
EList<IModelElementSpecification> specs = act.getSpecifications();
for(IModelElementSpecification spec : specs) {
if(spec instanceof PinNumber) {
int pinNr = ((PinNumber)spec).getPinNumber();
hmap.put("pinNr", pinNr);
}
if(spec instanceof PeripheralAddress) {
int address = ((PeripheralAddress)spec).getPeripheralAddress();
hmap.put("address", address);
}
private String addSensorSpecsToList(PlatformConnectorUnitImpl conn) {
int id = conn.getId();
int pinNr = 0;
int address = 0;
EList<IModelElementSpecification> specs = conn.getSpecifications();
for(IModelElementSpecification spec : specs) {
if(spec instanceof PinNumber) {
pinNr = ((PinNumber)spec).getPinNumber();
}
if(spec instanceof PeripheralAddress) {
address = ((PeripheralAddress)spec).getPeripheralAddress();
}
actuatorList +=
" {" + hmap.get("Id") + ", " + hmap.get("pinNr") + ", " + hmap.get("address") +
"} ";
if(act.getId() != acts.get(acts.size() - 1).getId())
actuatorList += ", \n";
}
return actuatorList;
}
/** Create Header Files defining structure for sensor. */
private void createSensorHeaderFile(SourcePackage pack) {
String content = "#indef __SENSORS_H \n";
content += "#define __SENSORS.H \n\n";
content += "struct \n { \n";
content += " int Id; \n int pinNr; \n int address; \n } sensors; \n ";
content += "extern sensors sen[];\n \n";
content += " #endif \n \n";
createFile(pack, content, "sensors.h");
return "\t{" + id + ", " + pinNr + ", " + address + "},\n";
}
/** Create Header Files defining structure for actuator. */
private void createActuatorHeaderFile(SourcePackage pack) {
String content = "#indef __ACTUATORS_H \n";
content += "#define __ACTUATORS.H \n\n";
content += "struct \n { \n";
content += " int Id; \n int pinNr; \n int address; \n } actuators; \n ";
content += "extern actuators act[];\n \n";
content += " #endif \n \n";
createFile(pack, content, "actuators.h");
private void createHeaderFile(SourcePackage pack, String type) {
String content = "#ifndef __" + type.toUpperCase() + "_H \n";
content += "#define __" + type.toUpperCase() + "_H \n\n";
content += "struct " + type + "\n{ \n";
content += "\tint Id;\n\tint pinNr;\n\tint address; \n};\n\n";
content += "typedef struct " + type + " " + type + ";\n\n";
content += "extern " + type + " " + type.substring(0, 3) + "[];\n\n";
content += "#endif \n \n";
createFile(pack, content, type + ".h");
}
/** Create file with a given Name and given text. */
......
......@@ -226,6 +226,7 @@ public class CoreExecutable extends ExecutionUnitExecutableBase<Core, CSourcePac
// String dirName = ((GenericPlatformUnit)modelElement.eContainer()).getName();
system.getImports().add(createInclude("message.pb-c", false));
system.getImports().add(createInclude("pi", false));
system.getImports().add(createInclude("components", false));
system.getImports().add(createInclude("stdio", true));
system.getImports().add(createInclude("unistd", true));
// addStandardHeaderInclude(system, dirName + "/message");
......@@ -284,7 +285,7 @@ public class CoreExecutable extends ExecutionUnitExecutableBase<Core, CSourcePac
boolean writeMsgFlag = modifyBusMsg(deployedPorts);
if(writeMsgFlag == true) {
body.add(assignment(definedConst("Msg msg")));
body.add(assignment(definedConst("msg_init(&msg)")));
body.add(assignment(definedConst("msg__init(&msg)")));
}
// Search for local channels, i.e. channels that begin and end at components deployed to
// this generic execution unit.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment