added ISR transformer
diff --git a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/OSTransformer.xtend b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/OSTransformer.xtend
index c184cd7..1599b37 100644
--- a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/OSTransformer.xtend
+++ b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/OSTransformer.xtend
@@ -83,7 +83,7 @@
/*-Building cache for TaskScheduler <---> and SchedulerAssociation's */
- cacheModel.buildTaskSchedulerAndSchedulerAssociationMap(amltMappingModel)
+ cacheModel.buildSchedulerAndSchedulerAssociationMap(amltMappingModel)
/*-Building cache for TaskScheduler <---> and TaskAllocation's */
@@ -159,7 +159,7 @@
var AmltCacheModel amltCacheModel = customObjsStore.getInstance(AmltCacheModel)
//TODO: Clarify this .. why to get SchedulerAllocation again when ISRAllocation is already present
- var amltSchedulerAllocation = amltCacheModel.taskScheduler_SchedulerAllocationMap.get(
+ var amltSchedulerAllocation = amltCacheModel.scheduler_SchedulerAllocationMap.get(
amltInterruptController)
if (amltSchedulerAllocation != null) {
@@ -314,7 +314,7 @@
}
/* ============ building Inchron CpuCore elements and associating to the Scheduler object ======================== */
- var amltSchedulerAllocation = amltCacheModel.getTaskScheduler_SchedulerAllocationMap.get(amltTaskScheduler)
+ var amltSchedulerAllocation = amltCacheModel.getScheduler_SchedulerAllocationMap.get(amltTaskScheduler)
if (amltSchedulerAllocation != null) {
@@ -336,7 +336,7 @@
// get the appropriate SchedulerAssociation to identify on which Core this scheduler is mapped
var AmltCacheModel cacheModel = customObjsStore.getInstance(AmltCacheModel)
- var amltChildSchedulerAllocation = cacheModel.getTaskScheduler_SchedulerAllocationMap.get(amltChildScheduler)
+ var amltChildSchedulerAllocation = cacheModel.getScheduler_SchedulerAllocationMap.get(amltChildScheduler)
if (amltChildSchedulerAllocation != null) {
@@ -420,7 +420,7 @@
/* ============ building Inchron CpuCore elements and associating to the Scheduler object ======================== */
- var amltChildSchedulerAllocation = amltCacheModel.getTaskScheduler_SchedulerAllocationMap.get(amltTaskScheduler)
+ var amltChildSchedulerAllocation = amltCacheModel.getScheduler_SchedulerAllocationMap.get(amltTaskScheduler)
if (amltChildSchedulerAllocation != null) {
diff --git a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/mapping/MappingTransformer.xtend b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/mapping/MappingTransformer.xtend
index ff9a735..69f6287 100644
--- a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/mapping/MappingTransformer.xtend
+++ b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/mapping/MappingTransformer.xtend
@@ -48,7 +48,7 @@
//TODO: Migration rule -> considering responsibility from the first TaskScheduler of this OS
- var amltSchedulerAllocation=cacheModel.taskScheduler_SchedulerAllocationMap.get(amlRootTaskSchedulers.get(0))
+ var amltSchedulerAllocation=cacheModel.scheduler_SchedulerAllocationMap.get(amlRootTaskSchedulers.get(0))
amltSchedulerAllocation.responsibility.forEach[amltProcessingUnit|{
inchronRootIsrScheduler.cpuCores.add(cacheModel.getInchronCpuCore(amltProcessingUnit.name))
@@ -60,12 +60,14 @@
inchronRootIsrScheduler.name=amltOS.interruptControllers.get(0).name
- var amltSchedulerAllocation=cacheModel.taskScheduler_SchedulerAllocationMap.get( amltOS.interruptControllers.get(0))
+ var amltSchedulerAllocation=cacheModel.scheduler_SchedulerAllocationMap.get( amltOS.interruptControllers.get(0))
amltSchedulerAllocation.responsibility.forEach[amltProcessingUnit|{
inchronRootIsrScheduler.cpuCores.add(cacheModel.getInchronCpuCore(amltProcessingUnit.name))
}]
+ cacheModel.addInchronScheduler_amltSchedulerMap(inchronRootIsrScheduler,amltOS.interruptControllers.get(0))
+
}else{
//todo: validation rule
}
@@ -87,7 +89,7 @@
parentISRScheduler.schedulables.add(inchronScheduler)
- var amltSchedulerAllocation=cacheModel.taskScheduler_SchedulerAllocationMap.get(amltTaskScheduler)
+ var amltSchedulerAllocation=cacheModel.scheduler_SchedulerAllocationMap.get(amltTaskScheduler)
amltSchedulerAllocation.responsibility.forEach[amltProcessingUnit|{
inchronScheduler.cpuCores.add(cacheModel.getInchronCpuCore(amltProcessingUnit.name))
@@ -99,7 +101,7 @@
createInchronScheduler(amltChildTaskScheduler,inchronScheduler,cacheModel )
}
- cacheModel.addInchronScheduler_amltTaskSchedulerMap(inchronScheduler,amltTaskScheduler)
+ cacheModel.addInchronScheduler_amltSchedulerMap(inchronScheduler,amltTaskScheduler)
}
/**
diff --git a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/ISRTransformer.xtend b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/ISRTransformer.xtend
new file mode 100644
index 0000000..01e07a2
--- /dev/null
+++ b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/ISRTransformer.xtend
@@ -0,0 +1,14 @@
+package templates.m2m.sw
+
+import org.eclipse.app4mc.amalthea.model.ISR
+import templates.AbstractAmaltheaInchronTransformer
+
+class ISRTransformer extends AbstractAmaltheaInchronTransformer{
+
+ public def create inchronModelFactory.createProcess createProcess(ISR amltISR ){
+
+ it.name=amltISR.name
+
+ it.isr = true
+ }
+}
\ No newline at end of file
diff --git a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/SWTransformer.xtend b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/SWTransformer.xtend
index 0775db0..2e8c8fe 100644
--- a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/SWTransformer.xtend
+++ b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/m2m/sw/SWTransformer.xtend
@@ -5,12 +5,15 @@
import org.eclipse.app4mc.amalthea.model.SWModel
import templates.AbstractAmaltheaInchronTransformer
import templates.utils.AmltCacheModel
+import org.eclipse.app4mc.amalthea.model.TaskScheduler
+import org.eclipse.app4mc.amalthea.model.InterruptController
class SWTransformer extends AbstractAmaltheaInchronTransformer {
var AmltCacheModel cacheModel
@Inject TaskTransformer taskTransformer
+ @Inject ISRTransformer isrTransformer
public def transformSWModel(SWModel amltSwModel, Model inchronModel) {
@@ -18,14 +21,16 @@
cacheModel=customObjsStore.getInstance(AmltCacheModel)
- val inchronScheduler_amltTaskSchedulerMap=cacheModel.getAmltTaskSchedulerFromInchronSchedulerMap()
+ val inchronScheduler_amltSchedulerMap=cacheModel.getInchronScheduler_amltSchedulerMap()
- inchronScheduler_amltTaskSchedulerMap.keySet.forEach[inchronScheduler|
+ inchronScheduler_amltSchedulerMap.keySet.forEach[inchronScheduler|
{
- var amltTaskScheduler=inchronScheduler_amltTaskSchedulerMap.get(inchronScheduler)
+ var amltScheduler=inchronScheduler_amltSchedulerMap.get(inchronScheduler)
- if(amltTaskScheduler !=null){
- amltTaskScheduler.taskAllocations.forEach[amltTaskAllocation|{
+ if(amltScheduler !=null){
+
+ if(amltScheduler instanceof TaskScheduler){
+ amltScheduler.taskAllocations.forEach[amltTaskAllocation|{
var amltTask=amltTaskAllocation.task
@@ -33,6 +38,14 @@
inchronScheduler.schedulables.add(inchronProcess)
}]
+ }else if(amltScheduler instanceof InterruptController){
+
+ amltScheduler.isrAllocations.forEach[amltISRAllocation|{
+ var amltISR=amltISRAllocation.isr
+ var inchronProcess=isrTransformer.createProcess(amltISR)
+ inchronScheduler.schedulables.add(inchronProcess)
+ }]
+ }
}
}
]
diff --git a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/utils/AmltCacheModel.java b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/utils/AmltCacheModel.java
index 13ac05e..a7fa108 100644
--- a/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/utils/AmltCacheModel.java
+++ b/eclipse-tools/model-transformation/examples/amlt2inchron/org.eclipse.app4mc.transform.to.inchron.m2m/src/templates/utils/AmltCacheModel.java
@@ -50,13 +50,13 @@
private Map<String,RtosConfig> inchronRtosConfigMap = new HashMap<>();
- private Map<com.inchron.realtime.root.model.Scheduler, TaskScheduler> inchronScheduler_amltTaskSchedulerMap = new HashMap<>();
+ private Map<com.inchron.realtime.root.model.Scheduler, Scheduler> inchronScheduler_amltSchedulerMap = new HashMap<>();
private Map<HwStructure, GenericSystem> mappingAmltMicroController_GenericSystem = new HashMap<>();
- private Map<Scheduler, SchedulerAllocation> taskScheduler_schedulerAllocationMap=new HashMap<Scheduler, SchedulerAllocation>();
+ private Map<Scheduler, SchedulerAllocation> scheduler_schedulerAllocationMap=new HashMap<Scheduler, SchedulerAllocation>();
private Map<Task, List<TaskAllocation>> tasks_TaskAllocationMap=new HashMap<Task, List<TaskAllocation>>();
@@ -142,7 +142,7 @@
}
public Map<Scheduler, SchedulerAllocation> getTaskScheduler_schedulerAllocationMap() {
- return taskScheduler_schedulerAllocationMap;
+ return scheduler_schedulerAllocationMap;
}
@@ -163,13 +163,13 @@
for (SchedulerAllocation schedulerAllocation : schedulerAllocations) {
- taskScheduler_schedulerAllocationMap.put(schedulerAllocation.getScheduler(), schedulerAllocation);
+ scheduler_schedulerAllocationMap.put(schedulerAllocation.getScheduler(), schedulerAllocation);
}
}
- public void buildTaskSchedulerAndSchedulerAssociationMap(MappingModel mappingModel){
+ public void buildSchedulerAndSchedulerAssociationMap(MappingModel mappingModel){
EList<SchedulerAllocation> schedulerAllocations = mappingModel.getSchedulerAllocation();
@@ -178,7 +178,7 @@
Scheduler scheduler = schedulerAllocation.getScheduler();
if(scheduler instanceof TaskScheduler){
- taskScheduler_schedulerAllocationMap.put(scheduler, schedulerAllocation);
+ scheduler_schedulerAllocationMap.put(scheduler, schedulerAllocation);
}else if(scheduler instanceof InterruptController){
// isr_schedulerAllocationMap.put(((InterruptController)scheduler).getISR, schedulerAllocation);
@@ -187,8 +187,8 @@
}
- public Map<Scheduler, SchedulerAllocation> getTaskScheduler_SchedulerAllocationMap() {
- return taskScheduler_schedulerAllocationMap;
+ public Map<Scheduler, SchedulerAllocation> getScheduler_SchedulerAllocationMap() {
+ return scheduler_schedulerAllocationMap;
}
public Map<TaskScheduler, List<TaskAllocation>> getTaskScheduler_TaskAllocationMap() {
@@ -258,16 +258,16 @@
}
- public void addInchronScheduler_amltTaskSchedulerMap( com.inchron.realtime.root.model.Scheduler inchronScheduler, TaskScheduler amltScheduler ) {
- inchronScheduler_amltTaskSchedulerMap.put(inchronScheduler, amltScheduler);
+ public void addInchronScheduler_amltSchedulerMap( com.inchron.realtime.root.model.Scheduler inchronScheduler, Scheduler amltScheduler ) {
+ inchronScheduler_amltSchedulerMap.put(inchronScheduler, amltScheduler);
}
- public TaskScheduler getAmltTaskSchedulerFromInchronScheduler(com.inchron.realtime.root.model.Scheduler inchronScheduler) {
- return inchronScheduler_amltTaskSchedulerMap.get(inchronScheduler);
+ public Scheduler getAmltSchedulerFromInchronScheduler(com.inchron.realtime.root.model.Scheduler inchronScheduler) {
+ return inchronScheduler_amltSchedulerMap.get(inchronScheduler);
}
- public Map<com.inchron.realtime.root.model.Scheduler, TaskScheduler> getAmltTaskSchedulerFromInchronSchedulerMap() {
- return inchronScheduler_amltTaskSchedulerMap ;
+ public Map<com.inchron.realtime.root.model.Scheduler, Scheduler> getInchronScheduler_amltSchedulerMap() {
+ return inchronScheduler_amltSchedulerMap ;
}