/**
 * *******************************************************************************
 *  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
}