/*2013-01-18T16:22:29-01:00*/

/********************************************************************
 * code_binaire.c
 * 
 * generated by: plcgen 2.3.253
 ********************************************************************/

#include "cb_comp.h"
#include "iec_1131.h"

#include "code_binaire.h"



/**************************** Variables *****************************/

CB_Index code_binaire__num = 0;
CB_Mem_Int *code_binaire_entreeBinaire;
CB_Mem_Bool *code_binaire_figeageCodeur;
CB_Mem_Bool *code_binaire_bit15;
CB_Mem_Bool *code_binaire_bit14;
CB_Mem_Bool *code_binaire_bit13;
CB_Mem_Bool *code_binaire_bit12;
CB_Mem_Bool *code_binaire_bit11;
CB_Mem_Bool *code_binaire_bit10;
CB_Mem_Bool *code_binaire_bit09;
CB_Mem_Bool *code_binaire_bit08;
CB_Mem_Bool *code_binaire_bit07;
CB_Mem_Bool *code_binaire_bit06;
CB_Mem_Bool *code_binaire_bit05;
CB_Mem_Bool *code_binaire_bit04;
CB_Mem_Bool *code_binaire_bit03;
CB_Mem_Bool *code_binaire_bit02;
CB_Mem_Bool *code_binaire_bit01;
CB_Mem_Bool *code_binaire_bit00;
CB_Mem_Int *code_binaire_sortieMot;
CB_Mem_Int *code_binaire_valeurentree;
CB_Mem_Bool *code_binaire_parite;
CB_Mem_Bool *code_binaire_paritepaire;
CB_Mem_Bool *code_binaire_pariteimpaire;
CB_Mem_Bool *code_binaire_d_forcage;
CB_Mem_Int *code_binaire_v_d_forcage;

/**************************** Variables *****************************/

#define entreeBinaire (code_binaire_entreeBinaire->CB_current_value)
#define figeageCodeur (code_binaire_figeageCodeur->CB_current_value)
#define bit15 (code_binaire_bit15->CB_current_value)
#define bit14 (code_binaire_bit14->CB_current_value)
#define bit13 (code_binaire_bit13->CB_current_value)
#define bit12 (code_binaire_bit12->CB_current_value)
#define bit11 (code_binaire_bit11->CB_current_value)
#define bit10 (code_binaire_bit10->CB_current_value)
#define bit09 (code_binaire_bit09->CB_current_value)
#define bit08 (code_binaire_bit08->CB_current_value)
#define bit07 (code_binaire_bit07->CB_current_value)
#define bit06 (code_binaire_bit06->CB_current_value)
#define bit05 (code_binaire_bit05->CB_current_value)
#define bit04 (code_binaire_bit04->CB_current_value)
#define bit03 (code_binaire_bit03->CB_current_value)
#define bit02 (code_binaire_bit02->CB_current_value)
#define bit01 (code_binaire_bit01->CB_current_value)
#define bit00 (code_binaire_bit00->CB_current_value)
#define sortieMot (code_binaire_sortieMot->CB_current_value)
#define valeurentree (code_binaire_valeurentree->CB_current_value)
#define parite (code_binaire_parite->CB_current_value)
#define paritepaire (code_binaire_paritepaire->CB_current_value)
#define pariteimpaire (code_binaire_pariteimpaire->CB_current_value)
#define d_forcage (code_binaire_d_forcage->CB_current_value)
#define v_d_forcage (code_binaire_v_d_forcage->CB_current_value)


/************************ Components offsets ************************/


/********************* Initialization function **********************/

int _bibliotheque_epo__code_binaire_init(void)
{
	(self.Bool+2)->CB_current_value = 1; /*pariteimpaire*/
	self.Bool+=4;
	self.Int+=2;


	return 0;
}


/************************ Behavior function *************************/

int bibliotheque_epo__code_binaire(void)
{
	if (exec_term_node(self_num)) {

		/*********************** Internals variables ************************/

		code_binaire_valeurentree = self.Int+0;
		code_binaire_parite = self.Bool+0;
		code_binaire_paritepaire = self.Bool+1;
		code_binaire_pariteimpaire = self.Bool+2;
		code_binaire_d_forcage = self.Bool+3;
		code_binaire_v_d_forcage = self.Int+1;

		/********************* Pre-conditions execution *********************/

		/*no Pre-conditions*/

		/************************ Behavior execution ************************/

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Capteurs							*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/*Ce module represente le comportement					*/
			/* d un codeur .								*/
			/* on code une valeur entree sur 15 bits 					*/
			/*	le 16 eme servant de bit de parite.				*/
			/* -----------------------------------------------------------------	*/

			/* -----------------------------------------------------------------	*/
			/* Traitement defaut forcage						*/
			/* -----------------------------------------------------------------	*/
			if (d_forcage) valeurentree = v_d_forcage;
			else valeurentree = entreeBinaire;


			/* -----------------------------------------------------------------	*/
			/* Gestion du codeur								*/
			/* -----------------------------------------------------------------	*/
			if (!figeageCodeur) {
				bit00 = 0;
				bit01 = 0;
				bit02 = 0;
				bit03 = 0;
				bit04 = 0;
				bit05 = 0;
				bit06 = 0;
				bit07 = 0;
				bit08 = 0;
				bit09 = 0;
				bit10 = 0;
				bit11 = 0;
				bit12 = 0;
				bit13 = 0;
				bit14 = 0;
				bit15 = 0;

				if ((valeurentree & 1)>0) bit00 = 1;
				if ((valeurentree & 2)>0) bit01 = 1;
				if ((valeurentree & 4)>0) bit02 = 1;
				if ((valeurentree & 8)>0) bit03 = 1;
				if ((valeurentree & 16)>0) bit04 = 1;
				if ((valeurentree & 32)>0) bit05 = 1;
				if ((valeurentree & 64)>0) bit06 = 1;
				if ((valeurentree & 128)>0) bit07 = 1;
				if ((valeurentree & 256)>0) bit08 = 1;
				if ((valeurentree & 512)>0) bit09 = 1;
				if ((valeurentree & 1024)>0) bit10 = 1;
				if ((valeurentree & 2048)>0) bit11 = 1;
				if ((valeurentree & 4096)>0) bit12 = 1;
				if ((valeurentree & 8192)>0) bit13 = 1;
				if ((valeurentree & 16384)>0) bit14 = 1;
				if ((valeurentree & 32768)>0) bit15 = 1;

				/* -----------------------------------------------------------------	*/
				/* 	Calcul de la parite : Si parite = 0 => parite paire		*/
				/* -----------------------------------------------------------------	*/
				parite =((((((((((((((bit00 ^ bit01) ^ bit02) ^ bit03) ^ bit04) ^ bit05) ^ bit06) ^ bit07) ^ bit08)
						 ^ bit09) ^ bit10) ^ bit11) ^ bit12) ^ bit13) ^ bit14);

				if (paritepaire && !pariteimpaire) bit15 = parite;
				else if(!paritepaire && pariteimpaire) bit15 = !parite;

				/* -----------------------------------------------------------------	*/
				/*	Traitement sortie sur mot						*/
				/* -----------------------------------------------------------------	*/
				sortieMot = 0;
				if (bit00)  sortieMot = sortieMot + 1;
				if (bit01)  sortieMot = sortieMot + 2;
				if (bit02)  sortieMot = sortieMot + 4;
				if (bit03)  sortieMot = sortieMot + 8;
				if (bit04)  sortieMot = sortieMot + 16;
				if (bit05)  sortieMot = sortieMot + 32;
				if (bit06)  sortieMot = sortieMot + 64;
				if (bit07)  sortieMot = sortieMot + 128;
				if (bit08)  sortieMot = sortieMot + 256;
				if (bit09)  sortieMot = sortieMot + 512;
				if (bit10)  sortieMot = sortieMot + 1024;
				if (bit11)  sortieMot = sortieMot + 2048;
				if (bit12)  sortieMot = sortieMot + 4096;
				if (bit13)  sortieMot = sortieMot + 8192;
				if (bit14)  sortieMot = sortieMot + 16384;
				if (bit15)  sortieMot = sortieMot + 32768;
			}
		}

		CB_post_bool(code_binaire_bit15);
		CB_post_bool(code_binaire_bit14);
		CB_post_bool(code_binaire_bit13);
		CB_post_bool(code_binaire_bit12);
		CB_post_bool(code_binaire_bit11);
		CB_post_bool(code_binaire_bit10);
		CB_post_bool(code_binaire_bit09);
		CB_post_bool(code_binaire_bit08);
		CB_post_bool(code_binaire_bit07);
		CB_post_bool(code_binaire_bit06);
		CB_post_bool(code_binaire_bit05);
		CB_post_bool(code_binaire_bit04);
		CB_post_bool(code_binaire_bit03);
		CB_post_bool(code_binaire_bit02);
		CB_post_bool(code_binaire_bit01);
		CB_post_bool(code_binaire_bit00);
		CB_post_int(code_binaire_sortieMot);

		/******************** Post-conditions execution *********************/

		/*no Post-conditions*/
	}

	/*************************** self update ****************************/

	self.Bool += 4;
	self.Int += 2;

	return 0;
}

