<?xml version="1.0"?>
<!DOCTYPE APPLICATION SYSTEM "sys/savecomp.dtd">
<APPLICATION id="ACCCApplication">
	<IODEF>
		<INPORT mode="trig" type="void" id="trigFiftyHz" value="20"/>
		<INPORT mode="trig" type="void" id="trigTenHz" value="100"/>
		<INPORT mode="data" type="int" id="RoadSignsEnabled" />
		<INPORT mode="data" type="int" id="ACCMaxSpeed" />
		<INPORT mode="data" type="int" id="RoadSignSpeed" />
		<INPORT mode="data" type="int" id="Distance" />
		<INPORT mode="data" type="int" id="CurrentSpeed" />
		<INPORT mode="data" type="int" id="ACCEnabled" />
		<INPORT mode="data" type="int" id="BrakePedalUsed" />
		<OUTPORT mode="data" type="int" id="Throttle" />
		<OUTPORT mode="data" type="int" id="MaxSpeed" />
		<OUTPORT mode="data" type="int" id="BrakeAssist" />
		<OUTPORT mode="data" type="int" id="ACC" />
		<OUTPORT mode="data" type="int" id="BrakeSignal" />
	</IODEF>
	<TYPEDEFS>
		<COMPONENTDESC id="SpeedLimit">
			<INPORT mode="trig" type="void" id="SpeedLimit_Trig" />
			<INPORT mode="data" type="int" id="SpeedLimit_RoadSignsEnabled" />
			<INPORT mode="data" type="int" id="SpeedLimit_ACCMaxSpeed" />
			<INPORT mode="data" type="int" id="SpeedLimit_ACCRoadSignSpeed" />
			<OUTPORT mode="data" type="int" id="SpeedLimit_MaxSpeed" />
			<OUTPORT mode="trig" type="void" id="SpeedLimit_TrigNext" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="speedLimit.h" entry="speedLimit"/>
		</COMPONENTDESC>	
		<COMPONENTDESC id="ObjectRecognition">
			<INPORT mode="trig" type="void" id="ObjectRecognition_Trig" />
			<INPORT mode="data" type="int" id="ObjectRecognition_Distance" />
			<INPORT mode="data" type="int" id="ObjectRecognition_CurrentSpeed" />
			<OUTPORT mode="data" type="int" id="ObjectRecognition_Brake" />
			<OUTPORT mode="combined" type="int" id="ObjectRecognition_RelativeSpeed" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="objectRecognition.h" entry="objectRecognition"/>
		</COMPONENTDESC>
		<COMPONENTDESC id="Brake">
			<INPORT mode="combined" type="int" id="Brake_Distance" />
			<OUTPORT mode="data" type="int" id="Brake_Signal" />
			<OUTPORT mode="data" type="int" id="Brake_LogHMI" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="BrakeFunc.h" entry="BrakeFunc"/>
		</COMPONENTDESC>
		<COMPONENTDESC id="LoggerOutput">
			<INPORT mode="trig" type="void" id="LoggerOutput_Trig" />
			<INPORT mode="data" type="int" id="LoggerOutput_MaxSpeed" value="0"/>
			<INPORT mode="data" type="int" id="LoggerOutput_Brake" value="0"/>
			<INPORT mode="data" type="int" id="LoggerOutput_ACCController" value="0"/>
			<OUTPORT mode="data" type="int" id="LoggerOutput_ACCMaxSpeed" />
			<OUTPORT mode="data" type="int" id="LoggerOutput_Braking" />
			<OUTPORT mode="data" type="int" id="LoggerOutput_ACC" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="loggerOutput.h" entry="loggerOutput"/>
		</COMPONENTDESC>					
		<COMPONENTDESC id="CalcDistOutput">
			<INPORT mode="data" type="int" id="CalcDistOutput_Distance" />
			<INPORT mode="combined" type="int" id="CalcDistOutput_RelativeSpeed" />
			<INPORT mode="data" type="int" id="CalcDistOutput_NewState" value="0"/>
			<OUTPORT mode="combined" type="int" id="CalcDistOutput_Control" />
			<OUTPORT mode="data" type="int" id="CalcDistOutput_State" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="calcDistOutput.h" entry="calcDistOutput"/>
		</COMPONENTDESC>
		<COMPONENTDESC id="UpdateDistState">
			<INPORT mode="data" type="int" id="UpdateDistState_State" />
			<INPORT mode="combined" type="int" id="UpdateDistState_In" />
			<OUTPORT mode="data" type="int" id="UpdateDistState_NewState" />
			<ATTRIBUTE id="WCET" type="ms" value="2" />
			<BEHAVIOUR filename="updateDistState.h" entry="updateDistState"/>
		</COMPONENTDESC>
		<COMPONENTDESC id="CalcSpeedOutput">
			<INPORT mode="data" type="int" id="CalcSpeedOutput_MaxSpeed" />
			<INPORT mode="data" type="int" id="CalcSpeedOutput_CurrentSpeed" />
			<INPORT mode="data" type="int" id="CalcSpeedOutput_NewState" value ="0"/>
			<INPORT mode="combined" type="int" id="CalcSpeedOutput_In" />
			<OUTPORT mode="combined" type="int" id="CalcSpeedOutput_State" />
			<OUTPORT mode="data" type="int" id="CalcSpeedOutput_Control" />
			<OUTPORT mode="data" type="int" id="CalcSpeedOutput_log" />
			<ATTRIBUTE id="WCET" type="ms" value="5" />
			<BEHAVIOUR filename="calcSpeedOutput.h" entry="calcSpeedOutput"/>
		</COMPONENTDESC>
		<COMPONENTDESC id="UpdateSpeedState">
			<INPORT mode="combined" type="int" id="UpdateSpeedState_State" />
			<OUTPORT mode="data" type="int" id="UpdateSpeedState_NewState" />
			<OUTPORT mode="combined" type="int" id="UpdateSpeedState_FeedBack" />
			<ATTRIBUTE id="WCET" type="ms" value="2" />
			<BEHAVIOUR filename="updateSpeedState.h" entry="updateSpeedState"/>
		</COMPONENTDESC>
		<SWITCHDESC id="ModeSwitch">
			<INPORT mode="data" type="int" id="ModeSwitch_Brake" setport="true"/>
			<INPORT mode="data" type="int" id="ModeSwitch_ACCEnabled" setport="true"/>
			<INPORT mode="data" type="int" id="ModeSwitch_DriverBrake" setport="true"/>
			<INPORT mode="combined" type="int" id="ModeSwitch_RelativeSpeed" />
			<INPORT mode="data" type="int" id="ModeSwitch_SpeedLimit" />
			<OUTPORT mode="combined" type="int" id="ModeSwitch_RelativeSpeedACC" />
			<OUTPORT mode="combined" type="int" id="ModeSwitch_RelativeSpeedBrake" />
			<OUTPORT mode="data" type="int" id="ModeSwitch_SpeedLimitOut" />
			<SWITCHCONDITION>
				<FROM id="ModeSwitch" port="ModeSwitch_RelativeSpeed"/>
				<TO id="ModeSwitch" port="ModeSwitch_RelativeSpeedACC"/>
				<CONDITION setport="ModeSwitch_ACCEnabled" value="1"/>
				<CONDITION setport="ModeSwitch_DriverBrake" value="0"/>
				<CONDITION setport="ModeSwitch_Brake" value="0"/>
			</SWITCHCONDITION>
			<SWITCHCONDITION>
				<FROM id="ModeSwitch" port="ModeSwitch_RelativeSpeed"/>
				<TO id="ModeSwitch" port="ModeSwitch_RelativeSpeedBrake"/>
				<CONDITION setport="ModeSwitch_ACCEnabled" value="1"/>
				<CONDITION setport="ModeSwitch_DriverBrake" value="0"/>
				<CONDITION setport="ModeSwitch_Brake" value="1"/>
			</SWITCHCONDITION>
			<SWITCHCONDITION>
				<FROM id="ModeSwitch" port="ModeSwitch_SpeedLimit"/>
				<TO id="ModeSwitch" port="ModeSwitch_SpeedLimitOut"/>
				<CONDITION setport="ModeSwitch_ACCEnabled" value="1"/>
				<CONDITION setport="ModeSwitch_DriverBrake" value="0"/>
				<CONDITION setport="ModeSwitch_Brake" value="0"/>
			</SWITCHCONDITION>
		</SWITCHDESC>
		<ASSEMBLYDESC id="DistanceController">
			<INPORT mode="data" type="int" id="DistanceController_Distance" />
			<INPORT mode="combined" type="int" id="DistanceController_RelativeSpeed" />
			<INPORT mode="combined" type="int" id="DistanceController_FeedBack" />
			<OUTPORT mode="combined" type="int" id="DistanceController_Control" />
			<COMPONENTLIST>
				<COMPONENT type="CalcDistOutput" id="myCalcDistOutput">
					<VARINIT port="CalcDistOutput_Distance" variable="0" />
					<VARINIT port="CalcDistOutput_RelativeSpeed" variable="1" />
					<VARINIT port="CalcDistOutput_NewState" variable="2" />
					<VARINIT port="CalcDistOutput_Control" variable="3" />
					<VARINIT port="CalcDistOutput_State" variable="4" />
				</COMPONENT>
				<COMPONENT type="UpdateDistState" id="myUpdateDistState">
					<VARINIT port="UpdateDistState_State" variable="0" />
					<VARINIT port="UpdateDistState_In" variable="1" />
					<VARINIT port="UpdateDistState_NewState" variable="2" />
				</COMPONENT>
			</COMPONENTLIST>
			<CONNECTIONLIST>
				<CONNECTION>
					<FROM id="DistanceController" port="DistanceController_Distance" />
					<TO id="myCalcDistOutput" port="CalcDistOutput_Distance" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="DistanceController" port="DistanceController_RelativeSpeed" />
					<TO id="myCalcDistOutput" port="CalcDistOutput_RelativeSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="DistanceController" port="DistanceController_FeedBack" />
					<TO id="myUpdateDistState" port="UpdateDistState_In" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myCalcDistOutput" port="CalcDistOutput_Control" />
					<TO id="DistanceController" port="DistanceController_Control" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myCalcDistOutput" port="CalcDistOutput_State" />
					<TO id="myUpdateDistState" port="UpdateDistState_State" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myUpdateDistState" port="UpdateDistState_NewState" />
					<TO id="myCalcDistOutput" port="CalcDistOutput_NewState" />
				</CONNECTION>
			</CONNECTIONLIST>				
		</ASSEMBLYDESC>
		<ASSEMBLYDESC id="SpeedController">
			<INPORT mode="data" type="int" id="SpeedController_MaxSpeed" />
			<INPORT mode="data" type="int" id="SpeedController_CurrentSpeed" />
			<INPORT mode="combined" type="int" id="SpeedController_SetSpeed" />
			<OUTPORT mode="combined" type="int" id="SpeedController_FeedBack" />
			<OUTPORT mode="data" type="int" id="SpeedController_Control" />
			<OUTPORT mode="data" type="int" id="SpeedController_log" />
			<COMPONENTLIST>
				<COMPONENT type="CalcSpeedOutput" id="myCalcSpeedOutput">
					<VARINIT port="CalcSpeedOutput_MaxSpeed" variable="0" />
					<VARINIT port="CalcSpeedOutput_CurrentSpeed" variable="1"/>
					<VARINIT port="CalcSpeedOutput_NewState" variable="2"/>
					<VARINIT port="CalcSpeedOutput_In" variable="3"/>
					<VARINIT port="CalcSpeedOutput_State" variable="4"/>
					<VARINIT port="CalcSpeedOutput_Control" variable="5"/>
					<VARINIT port="CalcSpeedOutput_log" variable="6"/>
				</COMPONENT>
				<COMPONENT type="UpdateSpeedState" id="myUpdateSpeedState">
					<VARINIT port="UpdateSpeedState_State" variable="0" />
					<VARINIT port="UpdateSpeedState_NewState" variable="1" />
					<VARINIT port="UpdateSpeedState_FeedBack" variable="2" />
				</COMPONENT>
			</COMPONENTLIST>
			<CONNECTIONLIST>
				<CONNECTION>
					<FROM id="myCalcSpeedOutput" port="CalcSpeedOutput_log" />
					<TO id="SpeedController" port="SpeedController_log" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="SpeedController" port="SpeedController_MaxSpeed" />
					<TO id="myCalcSpeedOutput" port="CalcSpeedOutput_MaxSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="SpeedController" port="SpeedController_CurrentSpeed" />
					<TO id="myCalcSpeedOutput" port="CalcSpeedOutput_CurrentSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="SpeedController" port="SpeedController_SetSpeed" />
					<TO id="myCalcSpeedOutput" port="CalcSpeedOutput_In" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myCalcSpeedOutput" port="CalcSpeedOutput_Control" />
					<TO id="SpeedController" port="SpeedController_Control" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myUpdateSpeedState" port="UpdateSpeedState_FeedBack" />
					<TO id="SpeedController" port="SpeedController_FeedBack" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myUpdateSpeedState" port="UpdateSpeedState_NewState" />
					<TO id="myCalcSpeedOutput" port="CalcSpeedOutput_NewState" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myCalcSpeedOutput" port="CalcSpeedOutput_State" />
					<TO id="myUpdateSpeedState" port="UpdateSpeedState_State" />
				</CONNECTION>
			</CONNECTIONLIST>				
		</ASSEMBLYDESC>
		<ASSEMBLYDESC id="ACCControllers">
			<INPORT mode="combined" type="int" id="ACCControllers_RelativeSpeed" />
			<INPORT mode="data" type="int" id="ACCControllers_Distance" />
			<INPORT mode="data" type="int" id="ACCControllers_MaxSpeed" />
			<INPORT mode="data" type="int" id="ACCControllers_CurrentSpeed" />
			<OUTPORT mode="data" type="int" id="ACCControllers_Control" />
			<OUTPORT mode="data" type="int" id="ACCControllers_toLogHMI" />
			<COMPONENTLIST>
				<ASSEMBLY type="SpeedController" id="mySpeedController" />
				<ASSEMBLY type="DistanceController" id="myDistanceController"/>
			</COMPONENTLIST>
			<CONNECTIONLIST>
				<CONNECTION>
					<FROM id="ACCControllers" port="ACCControllers_RelativeSpeed" />
					<TO id="myDistanceController" port="DistanceController_RelativeSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="ACCControllers" port="ACCControllers_Distance" />
					<TO id="myDistanceController" port="DistanceController_Distance" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="ACCControllers" port="ACCControllers_MaxSpeed" />
					<TO id="mySpeedController" port="SpeedController_MaxSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="ACCControllers" port="ACCControllers_CurrentSpeed" />
					<TO id="mySpeedController" port="SpeedController_CurrentSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="mySpeedController" port="SpeedController_Control" />
					<TO id="ACCControllers" port="ACCControllers_Control" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="myDistanceController" port="DistanceController_Control" />
					<TO id="mySpeedController" port="SpeedController_SetSpeed" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="mySpeedController" port="SpeedController_FeedBack" />
					<TO id="myDistanceController" port="DistanceController_FeedBack" />
				</CONNECTION>
				<CONNECTION>
					<FROM id="mySpeedController" port="SpeedController_log" />
					<TO id="ACCControllers" port="ACCControllers_toLogHMI" />
				</CONNECTION>
			</CONNECTIONLIST>
		</ASSEMBLYDESC>			
	</TYPEDEFS>
	<COMPONENTLIST>
		<COMPONENT type="SpeedLimit" id="mySpeedLimit">
			<VARINIT port="SpeedLimit_RoadSignsEnabled" variable="0" />
			<VARINIT port="SpeedLimit_ACCMaxSpeed" variable="1" />
			<VARINIT port="SpeedLimit_ACCRoadSignSpeed" variable="2" />
			<VARINIT port="SpeedLimit_MaxSpeed" variable="3" />
		</COMPONENT>
		<COMPONENT type="ObjectRecognition" id="myObjectRecognition">
			<VARINIT port="ObjectRecognition_Distance" variable="0" />
			<VARINIT port="ObjectRecognition_CurrentSpeed" variable="1" />
			<VARINIT port="ObjectRecognition_Brake" variable="2" />
			<VARINIT port="ObjectRecognition_RelativeSpeed" variable="3" />
		</COMPONENT>
		<COMPONENT type="Brake" id="myBrake">
			<VARINIT port="Brake_Distance" variable="0" />
			<VARINIT port="Brake_Signal" variable="1" />
			<VARINIT port="Brake_LogHMI" variable="2" />
		</COMPONENT>
		<COMPONENT type="LoggerOutput" id="myLoggerOutput">
			<VARINIT port="LoggerOutput_MaxSpeed" variable="0" />
			<VARINIT port="LoggerOutput_Brake" variable="1" />
			<VARINIT port="LoggerOutput_ACCController" variable="2" />
			<VARINIT port="LoggerOutput_ACCMaxSpeed" variable="3" />
			<VARINIT port="LoggerOutput_Braking" variable="4" />
			<VARINIT port="LoggerOutput_ACC" variable="5" />
		</COMPONENT>
		<SWITCH type="ModeSwitch" id="myModeSwitch" /> 			
		<ASSEMBLY type="ACCControllers" id="myACCControllers" />
	</COMPONENTLIST>
	<CONNECTIONLIST>
		<CONNECTION>
			<FROM id="ACCCApplication" port="trigFiftyHz" />
			<TO id="mySpeedLimit" port="SpeedLimit_Trig" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="RoadSignsEnabled" />
			<TO id="mySpeedLimit" port="SpeedLimit_RoadSignsEnabled" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="ACCMaxSpeed" />
			<TO id="mySpeedLimit" port="SpeedLimit_ACCMaxSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="RoadSignSpeed" />
			<TO id="mySpeedLimit" port="SpeedLimit_ACCRoadSignSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="Distance" />
			<TO id="myObjectRecognition" port="ObjectRecognition_Distance" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="CurrentSpeed" />
			<TO id="myObjectRecognition" port="ObjectRecognition_CurrentSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="ACCEnabled" />
			<TO id="myModeSwitch" port="ModeSwitch_ACCEnabled" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="BrakePedalUsed" />
			<TO id="myModeSwitch" port="ModeSwitch_DriverBrake" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="mySpeedLimit" port="SpeedLimit_MaxSpeed" />
			<TO id="myModeSwitch" port="ModeSwitch_SpeedLimit" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="mySpeedLimit" port="SpeedLimit_TrigNext" />
			<TO id="myObjectRecognition" port="ObjectRecognition_Trig" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="Distance" />
			<TO id="myACCControllers" port="ACCControllers_Distance" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="CurrentSpeed" />
			<TO id="myACCControllers" port="ACCControllers_CurrentSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myObjectRecognition" port="ObjectRecognition_RelativeSpeed" />
			<TO id="myModeSwitch" port="ModeSwitch_RelativeSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myObjectRecognition" port="ObjectRecognition_Brake" />
			<TO id="myModeSwitch" port="ModeSwitch_Brake" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myModeSwitch" port="ModeSwitch_RelativeSpeedACC" />
			<TO id="myACCControllers" port="ACCControllers_RelativeSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myModeSwitch" port="ModeSwitch_SpeedLimitOut" />
			<TO id="myLoggerOutput" port="LoggerOutput_MaxSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myModeSwitch" port="ModeSwitch_RelativeSpeedBrake" />
			<TO id="myBrake" port="Brake_Distance" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myBrake" port="Brake_LogHMI" />
			<TO id="myLoggerOutput" port="LoggerOutput_Brake" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myBrake" port="Brake_Signal" />
			<TO id="ACCCApplication" port="BrakeSignal" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="ACCCApplication" port="trigTenHz" />
			<TO id="myLoggerOutput" port="LoggerOutput_Trig" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myACCControllers" port="ACCControllers_Control" />
			<TO id="ACCCApplication" port="Throttle" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myACCControllers" port="ACCControllers_toLogHMI" />
			<TO id="myLoggerOutput" port="LoggerOutput_ACCController" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myLoggerOutput" port="LoggerOutput_ACCMaxSpeed" />
			<TO id="ACCCApplication" port="MaxSpeed" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myLoggerOutput" port="LoggerOutput_Braking" />
			<TO id="ACCCApplication" port="BrakeAssist" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myLoggerOutput" port="LoggerOutput_ACC" />
			<TO id="ACCCApplication" port="ACC" />
		</CONNECTION>
		<CONNECTION>
			<FROM id="myModeSwitch" port="ModeSwitch_SpeedLimitOut" />
			<TO id="myACCControllers" port="ACCControllers_MaxSpeed" />
		</CONNECTION>
	</CONNECTIONLIST>
</APPLICATION>
