/*
 * (c) Peter Mueller, 2008
 *
 * All rights reserved. Reproduction, modification,
 * use or disclosure to third parties without express
 * authority is forbidden.
 */

/* This file is generated from equivalent.xml - do not edit manually*/
/* Generated on: Sun Sep 21 13:31:11 CEST 2008 / version 1.2 */


#include <mydefs.h>
#include "equivalent.h"
#include "equivalent_ext.h"
#include "timer.h"
#include "io_interface.h"
#include <stdio.h>

extern EQUIVALENT_EVENT_T msg;
extern USIGN8_T timerId;

USIGN8_T a,b,enable;


void equivalent(EQUIVALENT_INSTANCEDATA_T *instanceVar){

	EQUIVALENT_EV_CONSUMED_FLAG_T evConsumed = 0U;

	/*execute entry code of default state once to init machine */
	if(instanceVar->idleEntry==1U){
		instanceVar->idleEntry=0U;
		setDiag(0x0);
setReady(0);
	}
	/* action code */
	
	a=getS_ChannelA();
	b=getS_ChannelB();
	enable=getEnable();

	switch(instanceVar->stateVar){

			case Idle:
				if((enable==1)){
					/*Transition from Idle to Active (which has substates)*/

					/*onEntry code of state Init*/
					setReady(1);
setError(0);
setDiag(0x8001);
					/*Set inner statevar to default state */
					equivalentChangeToStateActive(instanceVar,Init);

					/*Set outer statevar */
					equivalentChangeToState(instanceVar,Active);
				}
				else
				{
					/* Intentionally left blank */
				}
			break;

			case Active:

				switch(instanceVar->stateVarActive){

					/*
					 * Code for transitions starting from innter states
					 */
					case Init:
						if((a && !b && enable)){
							/*Transition from Init to WaitChannelB*/
							evConsumed = 1U;

							/*onEntry code of state WaitChannelB */
							setDiag(0x8004);
							timerStart(timerId);
							equivalentChangeToStateActive(instanceVar,WaitChannelB);
						}else if((a && b && enable)){
							/*Transition from Init to SafetyOutEnabled*/
							evConsumed = 1U;

							/*onEntry code of state SafetyOutEnabled */
							setS_EquivalentOut(1);
							setDiag(0x8000);
							timerStop(timerId);
							equivalentChangeToStateActive(instanceVar,SafetyOutEnabled);
						}else if((!a && b && enable)){
							/*Transition from Init to WaitChannelA*/
							evConsumed = 1U;

							/*onEntry code of state WaitChannelA */
							setDiag(0x8014);
							timerStart(timerId);
							equivalentChangeToStateActive(instanceVar,WaitChannelA);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case WaitChannelB:
						if((!a && !b && enable)){
							/*Transition from WaitChannelB to Init*/
							evConsumed = 1U;

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}else if((a && b && enable)){
							/*Transition from WaitChannelB to SafetyOutEnabled*/
							evConsumed = 1U;

							/*onEntry code of state SafetyOutEnabled */
							setS_EquivalentOut(1);
							setDiag(0x8000);
							timerStop(timerId);
							equivalentChangeToStateActive(instanceVar,SafetyOutEnabled);
						}else if((msg==(EQUIVALENT_EVENT_T)evTimeout)){
							/*Transition from WaitChannelB to Error12*/
							evConsumed = 1U;

							/*Action code for transition */
							setDiag(0xC001);

							/*onEntry code of state Error12 */
							setError(1);
							equivalentChangeToStateActive(instanceVar,Error12);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case SafetyOutEnabled:
						if((!a && !b && enable)){
							/*Transition from SafetyOutEnabled to Init*/
							evConsumed = 1U;

							/*OnExit code of state SafetyOutEnabled */
							setS_EquivalentOut(0);

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}else if((a && !b && enable)){
							/*Transition from SafetyOutEnabled to FromActiveWait*/
							evConsumed = 1U;

							/*OnExit code of state SafetyOutEnabled */
							setS_EquivalentOut(0);

							/*onEntry code of state FromActiveWait */
							setDiag(0x8005);
							timerStart(timerId);
							equivalentChangeToStateActive(instanceVar,FromActiveWait);
						}else if((!a && b && enable)){
							/*Transition from SafetyOutEnabled to FromActiveWait*/
							evConsumed = 1U;

							/*OnExit code of state SafetyOutEnabled */
							setS_EquivalentOut(0);

							/*onEntry code of state FromActiveWait */
							setDiag(0x8005);
							timerStart(timerId);
							equivalentChangeToStateActive(instanceVar,FromActiveWait);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case Error12:
						if((!a && !b && enable)){
							/*Transition from Error12 to Init*/
							evConsumed = 1U;

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case WaitChannelA:
						if((msg==(EQUIVALENT_EVENT_T)evTimeout)){
							/*Transition from WaitChannelA to Error12*/
							evConsumed = 1U;

							/*Action code for transition */
							setDiag(0xC002);

							/*onEntry code of state Error12 */
							setError(1);
							equivalentChangeToStateActive(instanceVar,Error12);
						}else if((!a && !b && enable)){
							/*Transition from WaitChannelA to Init*/
							evConsumed = 1U;

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}else if((a && b && enable)){
							/*Transition from WaitChannelA to SafetyOutEnabled*/
							evConsumed = 1U;

							/*onEntry code of state SafetyOutEnabled */
							setS_EquivalentOut(1);
							setDiag(0x8000);
							timerStop(timerId);
							equivalentChangeToStateActive(instanceVar,SafetyOutEnabled);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case FromActiveWait:
						if((msg==(EQUIVALENT_EVENT_T)evTimeout)){
							/*Transition from FromActiveWait to Error3*/
							evConsumed = 1U;

							/*OnExit code of state FromActiveWait */
							timerStop(timerId);

							/*onEntry code of state Error3 */
							setError(1);
							setDiag(0xC003);
							equivalentChangeToStateActive(instanceVar,Error3);
						}else if((!a && !b && enable)){
							/*Transition from FromActiveWait to Init*/
							evConsumed = 1U;

							/*OnExit code of state FromActiveWait */
							timerStop(timerId);

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					case Error3:
						if((!a && !b && enable)){
							/*Transition from Error3 to Init*/
							evConsumed = 1U;

							/*onEntry code of state Init */
							setReady(1);
							setError(0);
							setDiag(0x8001);
							equivalentChangeToStateActive(instanceVar,Init);
						}
						else
						{
							/* Intentionally left blank */
						}
					break;

					default:
						/*Intentionally left blank*/
					break;
				}
				if(evConsumed == 0U){
				/*Event not consumed by inner states, handover to parent */
				if((enable==0)){
					/*Check what the inner state is and call     */
					/*the correspoing onExit code (if available) */
					if(instanceVar->stateVarActive==Init){
						/* No onExit for state Init*/
					}else if(instanceVar->stateVarActive==WaitChannelB){
						/* No onExit for state WaitChannelB*/
					}else if(instanceVar->stateVarActive==SafetyOutEnabled){
						setS_EquivalentOut(0);
					}else if(instanceVar->stateVarActive==Error12){
						/* No onExit for state Error12*/
					}else if(instanceVar->stateVarActive==WaitChannelA){
						/* No onExit for state WaitChannelA*/
					}else if(instanceVar->stateVarActive==FromActiveWait){
						timerStop(timerId);
					}else if(instanceVar->stateVarActive==Error3){
						/* No onExit for state Error3*/
					}
					/*Set inner statevar of source to default state */
					equivalentChangeToStateActive(instanceVar,Init);

					/* onEntry code of state Idle*/
					setDiag(0x0);
					setReady(0);

					/*Set outer statevar*/
					equivalentChangeToState(instanceVar,Idle);
				}
				else
				{
					/* Intentionally left blank */
				}
				}
			break;

			default:
				/*Intentionally left blank*/
			break;
	}
}

