blob: 42030dad8fb517af664802c2a3f602f21399f039 [file] [log] [blame]
/**
* *******************************************************************************
* Copyright (c) 2017 Timing-Architects Embedded Systems GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Timing-Architects Embedded Systems GmbH - initial API and implementation
*
* *******************************************************************************
*/
@GenModel(
modelName="RTMGC", prefix="RTMGC",
copyrightText="*******************************************************************************\r\n Copyright (c) 2017 Timing-Architects Embedded Systems GmbH and others.\r\n All rights reserved. This program and the accompanying materials\r\n are made available under the terms of the Eclipse Public License v1.0\r\n which accompanies this distribution, and is available at\r\n http://www.eclipse.org/legal/epl-v10.html\r\n\r\n Generated using Eclipse EMF\r\n\r\n*******************************************************************************"
)
package org.eclipse.app4mc.amalthea.generator.configuration
import org.eclipse.emf.ecore.xml.^type.PositiveInteger
import org.eclipse.emf.ecore.xml.^type.UnsignedInt
class RTMGC {
contains Generation[1] generation
}
class Generation {
PositiveInteger count
String baseModel
String[1..*] hwModels
String[1..*] osModels
String swModel
String outputFolder
contains ActivationProperties[1] activations
contains LabelProperties[1] labels
contains RunnableProperties[1] runnables
contains SemaphoreProperties[1] semaphores
contains TaskProperties[1] tasks
}
class ActivationProperties {
contains PeriodicActivation[1] periodicActivation
contains PeriodicTriangleShift[1] periodicTriangleShift
contains SporadicActivation[1] sporadicActivation
}
abstract class Activation {
PositiveInteger appearanceProbability
}
class PeriodicActivation extends Activation {
contains Recurrence[1] recurrence
contains IntegerTimeDistribution[1] offset
}
class PeriodicTriangleShift extends PeriodicActivation {
contains TriangleClock[1] clock
}
class TriangleClock {
contains DoubleDistribution min_start
contains DoubleDistribution max_end
contains IntegerTimeDistribution shift
contains IntegerTimeDistribution period
}
class SporadicActivation extends Activation {
contains IntegerTimeDistribution[1] minValue
contains PercentageDistribution[1] maxValueDistance
contains PercentageDistribution[1] avgValueDistance
}
class Recurrence extends IntegerTimeDistribution {
RecurrenceType recurrenceType = "random"
}
enum RecurrenceType {
random = 0
harmonic = 1
}
class LabelProperties {
contains IntegerDistribution[1] count
contains IntegerDistribution[1] bitSize
contains IntegerDistribution[1] perSWC
}
class RunnableProperties {
RuntimeType[1] runtimeType = "instructionsConst"
contains IntegerDistribution[1] instructionsPerRunnables
contains IntegerDistribution[1] runnablesPerCallSequence
contains IntegerDistribution[1] runnablesPerSWC
contains PercentageDistribution[1] minStatisticsDistance
contains PercentageDistribution[1] maxStatisticsDistance
}
enum RuntimeType {
instructionsConst = 0
instructionsStatistics = 1
}
class SemaphoreProperties {
contains IntegerDistribution[1] count
boolean priorityCeilingProtocol
SemaphoreType[1] semaphoreType = "counting"
WaitModes[1] waitMode = "active waiting"
contains SemaphoreAccessProperties[1] SemaphoreAccess
}
class SemaphoreAccessProperties {
contains IntegerDistribution[1] perUnitReadAccessCount
contains IntegerDistribution[1] perUnitWriteAccessCount
SemaphoreRequestOrder[1] requestOrder = "none"
SemaphoreAccessType[1] accessType = "RandRunnable"
}
enum SemaphoreRequestOrder {
none = 0
requestGrouped = 1
nameIncreasing = 2
}
enum SemaphoreAccessType {
RWperTask = 0
RWperCallSequence = 1
RandRunnable = 2
WholeCS = 3
GroupedFMLP = 4
WeakFMLP = 5
EVA = 6
}
enum SemaphoreType {
binary = 0
counting = 1
both = 2
}
enum WaitModes {
polling as "active waiting" = 0
parking as "passive waiting" = 1
}
class TaskProperties {
contains IntegerDistribution[1] count
contains PercentageDistribution[1] load
contains IntegerDistribution[1] perTaskGroup
contains IntegerDistribution[1] mta
contains DoubleDistribution[1] deadlineFactor
contains IntegerDistribution[1] callSequencesBetweenSchedulePoints
contains CallGraphProperties[1] callGraphs
ProcessMappingAlgorithms mappingDetermination = "Worst Fit Decreasing"
PriorityDeterminationAlgorithm priorityDetermination = "Rate Monotonic"
}
class CallGraphProperties {
contains PercentageDistribution[1] signalDomainCoverage
contains PercentageDistribution[1] callSequenceUsage
}
abstract class Distribution {
DistributionType ^type = "Constant Value"
}
class IntegerDistribution extends Distribution {
UnsignedInt min
UnsignedInt avg
UnsignedInt max
}
class IntegerTimeDistribution extends IntegerDistribution {
TimeUnit unit = "ms"
}
class PercentageDistribution extends Distribution {
double minPercentage
double avgPercentage
double maxPercentage
}
class DoubleDistribution extends Distribution {
double min
double avg
double max
}
enum DistributionType {
const as "Constant Value" = 0
uniform as "Uniform Distribution" = 1
weibull as "Weibull Distribution" = 2
}
enum ProcessMappingAlgorithms {
WFD as "Worst Fit Decreasing" = 0
WFI as "Worst Fit Increasing" = 1
BFD as "Best Fit Decreasing" = 2
BFI as "Best Fit Increasing" = 3
}
enum PriorityDeterminationAlgorithm {
RM as "Rate Monotonic" = 0
DM as "Deadline Monotonic" = 1
}
enum TimeUnit {
ps = 0
ns = 1
us = 2
ms = 3
s = 4
}